10.1从文件中读取数据
#coding:gbk
#本章将学习:
# 错误处理:避免程序在面对意外情形时崩溃;
# 异常:是Python创建的的特殊对象,用于管理程序运行时出现的错误
# 模块json:它让你能够保存用户数据,以免在程序停止运行后丢失
#本章学习的技能俄可提高程序的适用性、可用性和稳定性
#10.1.1读取整个文件
#file_reader.py
with open('pi_digits.txt') as file_object:
contents = file_object.read()
print(contents.rstrip())
#函数open()接受一个参数:要打开文件的名称。Python在当前执行的文件所在目录中查找指定的文件。
#函数open()返回一个表示文件的对象
#open('pi_digits.txt')返回一个表示文件pi_digits.txt的对象;Python将这个对象存储在我们将在后面使用的变量中
#关键字with在不需要访问文件后将其关闭。
#你也可以调用open()和close()来打开和关闭文件,但这样做时,如果程序存在bug,导致close()语句未执行,文件将不会关闭。
#看似微不足道,但未妥善关闭文件可能会导致数据丢失或受损
#过早 地调用close(),会发现需要文件时它已关闭(无法访问),这会导致而更多的错误。
#方法read()读取这个文件的全部内容,并将其作为一个长长的字符串存储在变量contents中。
#多出空行的原因:read()到达文件末尾时返回一个空字符串,而将这个空字符串显示出来时就是一个空行。
#删除空行的方法:在print语句中使用rstrip()
#Python方法rstrip()删除(剥除字符串末尾的空白)
#10.1.2文件路径
#with open('text_files\filename.txt') as file_object:
#file_path = 'C:\Users\ehmatthes\other_files\text_files\file_name.txt'
#with open(file_path)as file_object:
#要让Python打开不予程序文件位于同一个目录中的文件,需要提供文件路径,它让Python到系统的特定位置去查找
#绝对路径通常比相对路径更长,因此将其存储在一个变量中,再将该变量传递给open()会有所帮助。
file_name = 'pi_digits.txt'
with open(file_name) as file_object:
for line in file_object:
print(line.strip())
#在这个文件中,每行的末尾都有一个看不见的换行符,而print语句也会加上一个换行符,因此每行末尾都有两个换行符:一个来自文件,一个来自print语句
#10.1.4创建一个包含文件各行内容的列表
file_name = 'pi_digits.txt'
with open(file_name) as file_object:
lines = file_object.readlines()
for line in lines:
print(line.rstrip())
#方法readlines()从文件中读取每一行,并将其存储在一个列表中
#10.1.5使用文件的内容
#pi_string.py
filename = 'pi_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)
print(len(pi_string))
#注意:读取文件时,Python将其中所有文本都解读为字符串。如果你读取的是数字,并要将其作为数值使用,就必须使用函数int()将其转换为整数,或使用函数float()将其转换为浮点数
#10.1.6包含一百万位的大型文件
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] + "...")
print(len(pi_string))
#10.1.7圆周率包含你的生日吗
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()
birthday = input("Enter your birthday, in the form mmddyy: ")
if birthday in pi_string:
print("Your brithday appears in the first million digits of pi!")
else:
print("Your birthday does not appear in the first million digits of pi.")