其他关于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()
方法可以传入一个序列(list
、tuple
、set
等可迭代对象),然后序列中的每一个元素依次写入文件中(注意,换行需要自己写入,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
语句的语句块中