读取文件
读取文件的全部内容
from pathlib import Path
path = Path('pi_digits.txt')
contents = path.read_text()
print(contents)
要使用文件的内容,需要将其路径告诉python,路径指的是在文件或文件夹在系统中的准确位置。Python提供了pathlib模块,让你能够更轻松地在各种系统中处理文件和目录
上述代码先从pathlib模块中导入Path类,Path对象指向一个文件,可用来做很多事情,例如让你在使用文件前核实它是否存在,读取文件的内容,以及将新数据写入文件。
这里创建了一个表示文件pi_digits的Path对象,并将其赋给了变量path。由于这个文件与当前编写的.py文件在同一个目录中,因此Path只需要知道文件名就能访问它

注意:VS Code会在最近打开的文件夹中查找文件,因此如果你使用的是VS Code,请先打开本章程序所在的文件夹。
read_text()将该文件的全部内容作为一个字符串返回。
相比于原文件,该输出唯一不同的地方是末尾多了一个空行;因为read_text()在到达文件末尾时会返回一个空字符串,而这个空字符串会被显示为一个空行。
要删除这个多出来的空行,可以对字符串变脸调用rstrip()
from pathlib import Path
path = Path('pi_digits.txt')
contents = path.read_text().rstrip()
print(contents)
也可以采用方法链式调用
contents = path.read_text().rstrip()
相对文件路径和绝对文件路径
当类似于pi_digits.txt这样简单文件名传递给Path时,Python将在当前执行的文件所在的目录中去查找。
根据你组织文件的方式,有时候可能打不开在程序文件所属目录中的文件。
例如:你可能将程序文件存储在了文件夹python_work中,并且在文件夹python_work中创建了一个名为text_files的文件夹,用于存储程序文件要操作的文本文件。虽然文件夹text_files在文件夹python_work中,但仅想Path传递文件夹text_files中的文件名称也是不行的,因为Python旨在文件夹python_work中查找,而不会在其子文件text_files中查找。
要让Python打开不与程序文件位于同一个目录中的文件,需要提供正确的路径。
在编程中,指定路径的方法有两种,首先,相对文件路径让Python到相对于当前运行的程序所在目录的指定位置去查找,由于文件夹text_files位于文件夹python_work中,因此需要创建一个以text_files打头并以文件名结尾的路径,如下所示:
path = Path('text_files/filename.txt)
其次,可以将文件在计算机中的准确位置告诉Python,这样就不用管当前运行的程序存储在什么地方了,这称为绝对文件路径。加入text_files并不在文件夹python_work中,则上述的相对路径是行不通的。
绝对文件路径通常比相对路径长,因为它们以系统的根文件夹为起点:
path = Path('/home/eric/data_files/text_files/filename.txt)
使用绝对路径,可以读取系统中任何地方的文件。
在显示文件路径时,Windows系统使用反斜杠(\)而不是斜杠(/)。但是你在代码中应该始终使用斜杠。
访问文件中的各行
from pathlib import Path
path = Path('pi_digits.txt')
contents = path.read_text().rstrip()
lines = contents.splitlines()
for line in lines:
print(line)
可以使用splitlines()方法将冗长的字符串转换为一系列行,再使用for循环以每次一行的方式检查文件中的各行。该方法把冗长字符串转换为一个列表,每一行的内容作为列表中的元素
使用文件的内容
from pathlib import Path
path = Path('pi_digits.txt')
contents = path.read_text()
lines = contents.splitlines()
pi_string = ''
for line in lines:
pi_string += line.lstrip()
print(pi_string)
print(len(pi_string))
lstrip()删除掉原来位于每行左端的空格
tip:在读取文本文件时,Python将其中的所有文本都解释为字符串。如果读取的是数,并且要将其作为数值使用,就必须使用int()函数将其转换为整数,或者使用float()函数将其转换为浮点数。
包含100万位的大型文件
相关数据文件从网上下载
只打印到小数点后50位
from pathlib import Path
path = Path('pi_million_digits.txt')
contents = path.read_text()
lines = contents.splitlines()
pi_spring = ''
for line in lines:
pi_spring += line.lstrip()
print(f"{pi_spring[:52]}...")
print(len(pi_spring))
圆周率中包含你的生日吗:
from pathlib import Path
path = Path('pi_million_digits.txt')
contents = path.read_text()
lines = contents.splitlines()
pi_spring = ''
for line in lines:
pi_spring += line.lstrip()
birthday = input("Enter your birthday, in the form mmddyy:")
if birthday in pi_spring:
print("Your birthday appears in the first million digits of pi!")
else:
print("Your birthday does not appear in the first million digits of pi.")
练习
练习10.1
from pathlib import Path
path = Path('learning_python.txt')
contents = path.read_text()
print(contents)
line

最低0.47元/天 解锁文章
1266

被折叠的 条评论
为什么被折叠?



