《Python从入门到实践》第十章 文件和异常

读取文件

读取文件的全部内容

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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值