打开、处理、关闭文件
Python提供了内置支持来实现文件的打开(open)、处理( process)和关闭( close)的通用技术
打开文件
>>> import os
>>> os.chdir('C:/Users/13272/Desktop')#更改当前工作目录change working directory
>>> todos=open('todos.txt','a')#在当前工作目录以“追加模式”打开todos.txt
- 如果open调用成功,解释器返回一个对象(称为一个流),这是实际文件的一个别名。
- 这个对象将赋给todos变量,todos变量也称文件句柄,可用它来指示你的文件
- open的第二个参数是可选的,用于指示这个文件以什么模式打开(详见下方)
常用模式包括“读”、“写”和“追加”。如果第一个参数中指定的文件不存在,其他各个模式(除了′x’之外)都会创建一个新的空文件
- ‘r’打开文件读数据(若文件不存在则新创建一个)
这是默认模式:没有提供第二个参数,就假设为’r’- 'w’打开文件写数据(若文件不存在则新创建一个)
会先清空文件中的数据,再写数据- 'a’打开文件追加数据(若文件不存在则新创建一个)
保留文件的内容,向文件末尾增加新数据- 'x’打开一个新文件来写数据(如果文件已经存在则失败)
文件默认地以文本模式打开(处理文本数据行ASCl或UTF8),如果你要处理非文本数据
(图像或MP3等文件),可以为模式增加”b“来指定二进制模式
- 例如,'wb’表示“写二进制数据”
- 如果第二个参数中还包含”+”,则会打开文件来完成读写
例如,x+b表示“读写一个新的二进制文件”关于open的更多详细内容可以参考 Python文档
写文件
打开文件后,下面使用print来写文件
>>> print('Put out the trash.',file=todos)#将字符串打印到文件流中
>>> print('Feed the cat.',file=todos)
- print的额外的参数file用来指定要写的文件流。
关闭文件(并保存)
>>> todos.close()#关闭文件流,进行清理
- 每次操作后务必调用close
- 如果忘记调用close,很可能会丢失数据
读文件
#以读模式打开文件,将返回的文件流赋给tasks
>>> tasks=open('todos.txt')#“读”是open函数的默认模式,无需特别指定参数'r'
>>> for row in tasks:
print(row,end='')#print默认end参数为换行符,如果这样会多打印一行
Put out the trash.
Feed the cat.
>>> tasks.close()
- 循环迭代变量row每次读取一个数据行
另一种方法:用readlines将所有数据行保存在一个列表中
>>> tasks=open('todos.txt')
>>> contents = tasks.readlines()
>>> contents
['Put out the trash.\n', 'Feed the cat.\n']
>>> print(''.join(contents))
Put out the trash.
Feed the cat.
>>> tasks.close()
更方便的读写文件:with
- Python支持“打开,处理,关闭”技术,但大多数 Python程序员更喜次使用
with
语句 -
with
语句可以完成“打开,处理,关闭”的等效工作,且不会忘记"close"的操作
只要with
的代码组结束,它会自动调用close - with语句会管理其代码组运行的上下文
with符合上下文管理协议,这时 Python中内置的一个编码约定
>>> with open('todos.txt') as tasks:
for row in tasks:
print(row,end='')
Put out the trash.
Feed the cat.