其他关于Python的总结文章请访问:

Python中的文件读写详解-read、readline、readlines、write、writelines、with as语句详解

打开文件

Python使用open语句打开文件,传入文件的(路径)名称,还有两个重要的参数,一个是文件处理模式(第二个参数),一个是编码方式(encoding=''):

file = open("text.txt",'r',encoding='utf-8')

打开文件后,可以使用

  • file.mode:获取文件对应的处理模式
  • file.name:获取文件的名字

其中比较重要的参数是文件的处理模式,(编码方式一般可以忽略,保持默认即可),默认'r',根据读写来自行传入,比较常用的是如下几个参数:

  • 'r'(默认值):读文件
  • 'w':写入文件,如果文件已经有内容了,就覆盖原来的内容
  • 'a':在文件后追加,不会覆盖原来的内容
  • 'r+':读、写文件,初始时光标位于文件开头,不会覆盖原内容,而且不会创建新文件,必须打开已有文件
  • 'w+':读、写文件,写入时,如果文件已经有内容了,就覆盖原来的内容
  • 'a+':读、写文件,写入时,在文件后追加,不会覆盖原来的内容

详细的对比可以看这个表格:

表格引用自菜鸟教程:https://www.runoob.com/python/python-files-io.html

模式

r

r+

w

w+

a

a+


+

+

+

+


+

+

+

+

+

创建

+

+

+

+

覆盖

+

+

指针在开始

+

+

+

+

指针在结尾

+

+

关闭文件

在使用完文件后,通常需要使用close方法关闭文件以清理资源:

file.close()

读取文件

全部读取

使用read()方法读取文件中的所有内容:

file = open('text.txt')
content = file.read()
print(content)
file.close()

逐行读取,全部保存

使用readlines()方法将文件内容逐行读出,保存到一个列表中,每一行保存成一个元素:

file = open('text.txt')
lines = file.readlines()
for line in lines:
    print(line)
file.close()

逐行读取,每次一行

使用readline()方法可以将文件中的内容逐行读取,每次调用返回一行,所以需要遍历来读取全部内容,但是占用内存最小,因为不是将文件中的所有内容一次读出:

file = open('text.txt')
line = file.readline()
while line:
    print(line)
    line = file.readline()
file.close()

写入文件

使用字符串写入

使用write()方法像文件中写入一个字符串,字符串中可以包括换行符(\n)等来设置换行等:

file = open('text.txt', 'w')
file.write("hello world 1\nhello world 2")
file.close()

使用可迭代对象写入

使用writelines()方法可以传入一个序列(listtupleset等可迭代对象),然后序列中的每一个元素依次写入文件中(注意,换行需要自己写入,writelines不会帮你自动换行,即不会将元素单独成行写入,比如下边例子中的第一个元素末尾的\n符号):

file = open('text.txt', 'w')
content = ['hello world 1\n', 'hello world 2']
file.writelines(content)
file.close()

使用with…as…语句处理文件

其实一种更好(更优雅)的方式是使用with…as…的语句来处理文件,这样你不必再写close的代码手动关闭文件,它会在使用完毕后自动为你清理文件所占用的内存,只要将open语句写在with后边,然后原来作为open返回值的遍历写给as即可:

file = open('text.txt', 'w')

等价于:

with open('text.txt', 'w') as file:

当然,处理文件的内容应该写在 with as 语句的语句块中