文件,就是计算机中由操作系统管理的具有名字的存储区域。
内置open函数会创建一个python文件对象,可以作为计算机上的一个文件链接。调用open后,你可以通过返回文件对象的方法来读写相关外部文件。
文件对象只是常见文件处理任务输出模块。多少文件方法都与执行外部文件相关的文件对象的输入和输出有关,但其他文件方法可查找文件中的新位置,刷新输出缓存等
output = open(r'C:\spam','w') | 创建输出文件 |
input = open('data','r') | 创建输入文件 |
input = open('data') | 与上行相同,'r'为默认值 |
aString = input.read() | 把整个文件读进一个字符串 |
aString = inpurt.read(N) | 读取之后的N个字节到一个字符串 |
aString = input.readline() | 读取下一行到一个字符串 |
aString = input.readlines() | 读取整个文件到字符串列表 |
output.write(aString) | 希尔字节字符串到文件 |
output.writelines(aList) | 把列表内所有字符串按行写入 |
output.close() | 关闭 |
output.flush() | 把输出缓冲区刷到硬盘,但不关闭文件 |
anyfile.seek(N) | 修改文件位置到偏移量N处以便下一个操作 |
for line in open('data'): use line | 文件迭代器一行行读取 |
open('f.txt',encoding='latin-1') | Unicode文本文件 |
open('f.bin','rb') | 二进制byte文件 |
'w' 写, 'r' 读, 'a'追加
模式字符串后加'b'可以进行二进制数据处理,如'rb'
加上'+'意味着同时为输入输出打开文件(即可同时读写)
open的前两个参数必须带上字符串,第三个参数是可选参数,他能够用来控制输出缓存,传入"0"意味着输出无缓存(写入方法调用时立即传给外部文件)
外部文件名参量可能包含平台特定的以及绝对或相对目录路径前缀。没有目录时,文件假定存在当前的工作目录中。
使用文件
文件迭代器是最后的读取行工具:
现在从文本中读取文字行的最佳方式是根本不需要读取,文件也有个迭代器会自动的在for循环,列表解析汇总其他迭代语句中对文件进行逐行读取
for line in open('myfile'):
print(line, end='')
内容是字符串,不是对象:
文件对其的数据回到脚本时是一个字符串,写入文件时,python不会自动地把对象转换为字符串,需要传递一个已经格式化的字符串。Python也包括一些高级标准库工具,用来处理一般对象的存储(如pickle)以及处理文件中打包的二进制数据(如struct)
文件的空行是含义换行符的字符串('\n'),而不是空字符串
close是通常选项:
close会终止对外部文件的连接。关闭释放了操作系统资源也清空了缓冲区。
推荐用with/as语句,它会自动关闭文件。
文件是缓冲的并且是可查找的:
默认情况下,输出文件总是缓冲的,这意味着写入的文本可能不会立即自动从内测转换到硬盘--关闭一个文件,或者运行flush方法,迫使缓存的数据进入硬盘
我们使用字符串rstrip方法去掉多余的行终止符;line[:-1]分片也可以,但是只要确定所有行都含有'\n'的时候才行(文件中最后一行有时候会没有)
F = open('datafile.txt')
line = F.readline()
line.rstrip()
要转换文件所存储的列表和字典,我们可以运行eval这一内置函数,eval能够把字符串当中可执行程序代码。
举个栗子:
>>> eval('[1,2,3]')
[1, 2, 3]
如下几块内容暂不填充:
用pickle存储Python原生对象
文件中打包二进制数据的存储与解析(struct)
Learning Python, Fourth Edition, by Mark Lutz.