Python3 文件
目录
从文件中读取数据
读取整个文件
创建一个文本文件:pi.txt,其包含的内容如下
创建一个Python文件read_file.py,用于读取pi.txt中的内容,并显示出来:
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
with open("pi.txt") as file_object:
pi = file_object.read()
print(pi)
要读取一个文件,首先得打开这个文件。
open()函数
用于打开一个文件。接受一个参数:需要打开的文件的名称或文件的路径。如果给的是文件的名称,Python就会在当前执行的.py文件所在的目录中查找指定的文件;如果指定的文件与当前执行的.py文件不在同一目录,就需要给出文件的路径(相对路径或者绝对路径)。
函数open()返回一个表示文件及其内容的文件对象,并通过as关键字将其引用存储在一个变量中(如本例中的file_object变量)。
关键字with
使用with关键字可以让Python自行确定在合适的时间打开或关闭文件。
read()方法
通过文件对象的read()方法读取文件的全部内容。
运行结果:
F:\project\venv\Scripts\python.exe F:/project/print_pi.py
3.1415926535
8979323846
Process finished with exit code 0
逐行读取
文件对象是一个可迭代对象,所以,可以使用for循环来遍历文件对象中每一行的内容:
# 逐行读取
with open("pi.txt") as file_object:
for v in file_object:
print(v)
3.1415926535
8979323846
创建一个包含文件各行内容的列表
使用with关键字时,open()函数返回的文件对象只能在with代码块内部使用。如果要在with代码块外部访问这个文件的内容,可以在with代码块内部将文件的各行内容存储到一个列表中,这样便可在with代码块外部通过这个列表访问文件内容。
# 创建一个包含文件各行内容的列表
with open("pi.txt") as file_object:
list = file_object.readlines()
for l in list:
print(l)
readlines()方法
读取文件的所有行,返回一个列表。
注意
Python读取文件中的内容时,会把所有的内容都解读为字符串。如果读取的是数字,就需要用int()或float()进行数据转换。
写入文件
写入到空文件中
创建一个空文件hello.txt,在同一目录下创建一个write_file.py文件用于向hello.txt中写入数据:
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
with open("hello.txt", 'w') as file_object:
file_object.write("hello world!")
此处调用open()函数时还提供了另一个参数,这个参数('w')表示以“写入模式”打开文件。常用的文件打开模式(mode)包括:
模式 | 描述 |
---|---|
r | 以只读模式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
w | 写入模式。打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
a | 追加模式。打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
注意
Python只能将字符串写入到文件中,要写入数值数据或者列表等,需要先用str()函数进行数据转换。
写入多行
文件对象的write()方法并不会在写入的文本末尾添加换行符,所以需要在写入的文本内容中包含换行符'\n':
# 写入多行
with open("hello.txt", 'w') as file_object:
file_object.write("Good morning\nhello world!\n") # 'w'写入模式会覆盖文件的原有内容
追加内容到文件
要追加内容到文件,就要以“追加模式”打开文件:
# 追加内容到文件
with open("hello.txt", 'a') as file_object:
file_object.write("I Love The World!") # 'a'追加模式会在文件末尾追加内容,不会覆盖原有内容