打开、处理、关闭文件

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.