10.1 从文件读取数据
10.1.1 读取整个文件
with open('pi_digits.txt') as file_object:
contents = file_object.read()
print(contents)
with open('poem.txt',encoding='utf-8') as file_object:
编码格式查看位置(在右下角写了个utf-8):
如需修改可将文件‘另存为’并修改:
输出结果如下:
大家自己打好代码便可观察发现,相比于原始文件,该输出唯一不同的地方是末尾多了一行。
为何会多出这个空行呢?因为read() 到达文件末尾时返回一个空字符串,而将这个空字符串显示出来时就是一个空行。要删除多出来的空行,可在print 语句中使用rstrip() :
print(contents.rstrip())
10.1.2 文件路径
file_path = 'C:\Users\ehmatthes\other_files\text_files\filename.txt'
with open(file_path) as file_object:
10.1.3 逐行读取
with open('poem.txt',encoding='utf-8') as file_object:
for line in file_object:
print(line)
结果如下:
观察结果我们会发现:我们每打印一行,还多了一行空白行。
因为在这个文件中,每行的末尾都有一个看不见的换行符,而print 语句也会加上一个换行符。。要消除这些多余的空白行,可在print 语句中使用rstrip() :
with open('poem.txt',encoding='utf-8') as file_object:
for line in file_object:
print(line.rstrip())
输出结果如下:
注意:还有一种删除方法叫strip()。strip()和rstrip()都是字符串的方法,用于删除字符串开头或结尾的特定字符(默认为空格)。strip()方法会同时删除字符串开头和结尾的特定字符。rstrip()方法只会删除字符串结尾的特定字符。
10.1.4 创建一个包含文件各行内容的列表
with open(filename) as file_object:
lines = file_object.readlines()
for line in lines:
print(line.rstrip())
注意:读取文本文件时,Python将其中的所有文本都解读为字符串。如果你读取的是数字,并要将其作为数值使用,就必须使用函数int() 将其转换为整数,或使用
函数 float() 将其转换为浮点数。
10.1.5 大型文件之“圆周率中包含你的生日吗?”
filename = 'pi_million_digits.txt'
with open(filename) as file_object:
lines = file_object.readlines()
pi_string = ''
for line in lines:
pi_string += line.strip()
print(pi_string[:52] + "...")
#我们只打印到小数点后50位,以免终端为显示全部1 000 000位而不断地翻滚
print(len(pi_string))
#输出表明,我们创建的字符串确实包含精确到小数点后1 000 000位的圆周率值
birthday = input("Enter your birthday, in the form mmddyy: ")
if birthday in pi_string:
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.2 写入文件
之前我们学习了怎么读文件,现在我们学习写入文件,这也是保存数据最简单的方式之一。
10.2.1 写入空文件
filename = 'programming.txt'
with open(filename, 'w') as file_object:
file_object.write("I love programming.")
调用open() 时提供了两个实参,第一个实参也是要打开的文件的名称;第二个实参('w' )告诉Python,我们要以写入模式打开这个文件。
注意:如果你要写入的文件不存在,函数open() 将自动创建它。然而,以写入('w' )模式打开文件时千万要小心,因为如果指定的文件已经存在,Python将在返回文件对象前清空该文件。
注意 :Python只能将字符串写入文本文件。要将数值数据存储到文本文件中,必须先使用函数 str() 将其转换为字符串格式。
10.3 异常
10.3.1 使用 try-except 代码块
try:
print(5/0)
except ZeroDivisionError:
print("You can't divide by zero!")
except ZeroDivisionError:
print("You can't divide by zero!")
10.3.2 else代码块
print("Give me two numbers, and I'll divide them.")
print("Enter 'q' to quit.")
while True:
first_number = input("\nFirst number: ")
if first_number == 'q':
break
second_number = input("Second number: ")
try:
answer = int(first_number) / int(second_number)
except ZeroDivisionError:
print("You can't divide by 0!")
else:
print(answer)