Skip to content

文件和流 #14

Description

@eziceice

Python中的IO

  • open(name[ , mode[ , buffering]]). name为文件名称,mode(模式)和buffering(缓冲)为可选参数.

    1. model - 文件模式,默认为读模式.但是通过改变参数也可以变成写模式.'+'读和写都是允许的-可以添加到其他模式中. ‘r’读模式, 'w'写模式, 'a'追加模式, 'b'二进制模式 - 可添加到其他模式中使用.
    2. buffering - 缓冲. 0或者False,代表无缓冲,所有读写操作都直接针对硬盘. 1或者True, 有缓冲, 代表Python将使用内存来代替硬盘,此时程序会更快,只有使用flush()或者close()才会更新硬盘. 大于1的数字代表缓冲区的大小(单位是字节), -1或者任何负数代表使用默认的缓冲区大小.
f = open('resource/IOTEST.txt', 'r+', True)
print(f.read()) #可以在read中指定数字来标注需要读取的字符数
f.write('this is more test\r')
f.seek(int) #找到文件中字符的index并且从此处开始
f.tell() #可以获得当前游标的位置
f.write('123455') #从当前游标的位置开始写入,注意,会覆盖后面的部分
f.readline(int) #int代表当前行中你想获取的字符数.
f.readlines() #可以读取一个文件中的所有行并将其作为list返回.
  • pipeline(管道), ‘|’. 管道符号可以将一个命令标准输出和下一个命令的标准输出连在一起.

  • 换行符, mac(\r), windosw(\r\n).

  • writelines()可以接受一个字符串的列表或者任何可迭代的对象或者序列,它会把所有接受的对象写入文件(stream)中. write()则可以使用为一行一行的写入.

import os
f = open('resource/IOTEST.txt', 'r+', True)
f.read() #read中可以加int表示要读取的字符数

f.write('\rthis is a test')
f.writelines(['\rthis is', '\ra stupid', '\r12345165151'])
  • 在文件写入过后必须要使用close()进行关闭文件,如果因为使用缓存而又因为一些原因程序崩溃,那么你所写入的数据将会丢失 - 切记使用close(). Python中有两种方法可以关闭一个文件或流.在任何情况下,能关闭文件直接关闭文件,如果不能便使用flush().
#使用try close
try:
    f = open('resource/IOTEST.txt', 'r+', True)
    f.write('123545')
finally:
    f.close()

#使用with statement,文件或者流将在语句结束后自动关闭.即便存在异常也会关闭.
with open('resource/IOTEST.txt', 'r+', True) as testclose:
    testclose.write()
    testclose.read()

  • with statement其实是使用了一种很通用的结构,允许使用所谓的上下文管理器(context manager). 该管理器支持__enter__和__exit__这两个方法的对象. 文件可以被用作与这种上下文管理器, enter方法返回文件本身, exist方法关闭文件.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions