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.")