1, open(‘file’, mode)
第一个参数是包含文件名的字符串。第二个参数是另一个字符串,其中包含一些描述文件使用方式的字符。mode 可以是 ‘r’,表示文件只能读取,‘w’ 表示只能写入(已存在的同名文件会被删除),还有 'a’表示打开文件以追加内容;任何写入的数据会自动添加到文件的末尾。‘r+’ 表示打开文件进行读写。mode 参数是可选的;省略时默认为 ‘r’。
open(file, mode=‘r’, buffering=-1, encoding=None, errors=None,newline=None, closefd=True, opener=None)
mode的参数如下,如果b(二进制)模式,打开文本会报错
2, with 关键字。
- 可以在语句结束后,关闭文件流。不用with关键字,文件会被python垃圾回收关闭。
with open('file') as f:read_data = f.read()
f.closed # True file关闭了
不用with,记得f.close()
3, 文件对象的方法
- 读取的方法
a,f.read([size]) size 为字符个数b,f.readline() 读取一行c,遍历读取所有行,与源文件格式相同for r in f:print(r, end=' ')d,读取的文件以列表的形式返回f.readlines() 或者 list(f)
- 写入的方法
f.write(string) 返回写入文件字符串的个数, 这会覆盖掉原理的文件内容,慎用。
在写入其它对象(列表,元组),先转换为字符串
>>> with open('F:/joy/2.txt', mode='w', encoding='utf-8') as f:... tules = ('abc', 123)... f.write(str(tules))...12
# 不带with的open
'''用f.flush() 刷新写入的字符
f.tell() 返回一个整数,给出文件对象在文件中的当前位置,表示为二进制模式下时从文件开始的字节数,以及文本模式下的意义不明的数字。
'''
-
f.seek(offset, whence)
用f.seek(offset, whence),来确定文件的位置,f.read(1)来读取文件。
whence 的 0 值表示从文件开头起算,1 表示使用当前文件位置,2 表示使用文件末尾作为参考点。 whence 如果省略则默认值为 0,即使用文件开头作为参考点。 -
使用f.seek(offset, whence)可能的异常
io.UnsupportedOperation: can’t do nonzero cur-relative seeks,没用以binary打开的文件offset非法。
def my_write(file_name: str):''' 只写模式,utf-8编码'''with open(file_name, mode='w', encoding='utf-8') as f:f.write('hello, my name is plus Lee.\nI am come from China')def my_read(file_name: str):''' 可读可写 b模式'''with open(file=file_name, mode='rb+') as f:print(f'{file_name} b模式下的文件内容是:{f.read()}') print('当前文件位置:', f.seek(0, 1), '个字符串')print(f'从第{f.seek(0, 0)}个字符开始读,第1个字符是{f.read(1)}')print(f'设置现在位置为{f.seek(0, 0)}, 从当前位置偏移{f.seek(7, 1)}个位置后,字符为{f.readline()}')print(f'现在位置{f.tell()}, 最后一个位置{f.seek(0, 2)}, {f.readline()}')'''
这个my_read() 方法,f.seek(offset, whence) 从whence偏移offset单位长度
whence为0,从文件第一个开始读取
whence为1,从当前位置偏移offset个长度
whence为2,从最后位置偏移offset个长度
whence 为1,或者2时易错,要在b模式打开文件在文本文件(mode没以 b 模式打开的文件),
只允许相对于文件开头搜索(使用 seek(0, 2) 搜索到文件末尾是个例外)
并且唯一有效的 offset 值是从 f.tell() 中返回的或者是零。
其他 offset 值都会产生未定义的行为
'''# my_write('f:/joy/2.txt')
my_read('f:/joy/2.txt')'''
f:/joy/2.txt b模式下的文件内容是:b'hello, my name is plus Lee.\r\nI am come from China'
当前文件位置: 49 个字符串
从第0个字符开始读,第1个字符是b'h'
设置现在位置为0, 从当前位置偏移7个位置后,字符为b'my name is plus Lee.\r\n'
现在位置29, 最后一个位置49, b''
'''