从文件中读取数据:读取整个文件-python进阶篇九
函数open:
open(file,mode,buffering,encodeing) --> 返回值是一个流对象(stream)
file:文件路径。
mode: rt是默认格式,读取文本文档。rd读取二进制格式。
stream中的对象只能读取一次,后面在使用read不能读出内容。
stream = open(r'E:\Project\a\a.txt') # 建立一个流
container = stream.read() # 读取流中的数据
print(container)
line = stream.readline() # 读取一行
print(line, end='') # 如果不加end='',默认会有换行符
# 读取所有行
while True:
line = stream.readline()
print(line)
if not line:
break
lines = stream.readlines() # 读取所有行到列表
print(lines) # ['hello wrod!\n', 'hello kite!\n', 'hello tom!']
# 读取图片用rb模式
stream_pic = open(r'E:\Project\a\a.jpg', 'rb')
pic = stream_pic.read()
print(pic)
读取整个文件
要读取文件,需要一个包含几行文本的文件。下面首先来创建一个文件,它包含精确到小数点后30位的圆周率值,且在小数点后每10位处都换行:
with open('d:/pi_digits.txt') as file_object: #返回一个表示文件的对象
contents = file_object.read() #读取文件对象的内容
print(contents)
'''
3.1415926535
8979323846
2643383279
'''
函数open()接受一个参数:要打开的文件的名称和路径。函数open() 返回一个表示文件的对象。
关键字with 在不再需要访问文件后将其关闭。在这个程序中,注意到我们调用了open() ,但没有调用close() ;你也可以调用open()和close()来打开和关闭文件,但这样做时,如果程序存在bug,导致close() 语句未执行,文件将不会关闭。
有了表示pi_digits.txt的文件对象后,我们使用方法read() (前述程序的第2行)读取这个文件的全部内容,并将其作为一个长长的字符串存储在变量contents中。因为read()到达文件末尾时返回一个空字符串,而将这个空字符串显示出来时就是一
个空行。消除空行可以print(contents.rstrip()),rstrip()删除(剥除)字符串末尾的空白。
逐行读取文件
逐行读取文件
filename = 'd:/pi_digits.txt'
with open(filename) as file_object:
for line in file_object:
print(line.rstrip())
通过列表一行行读取:
filename = 'd:/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(pi_string[:10] + "...") #只读取前8位
print(len(pi_string)) #获取内容长度
'''
3.141592653589793238462643383279
3.14159265...
32
'''
看你生日这圆周率里面吗。我一直想知道自己的生日是否包含在圆周率值中。下面来扩展刚才编写的程序,以确定某个人的生日是否包含在圆周率值的前1 000 000位中。为此,可将生日表示为一个由数字组成的字符串,再检查这个字符串是否包含在pi_string 中:
filename = 'd:/pi_digits.txt'
with open(filename) as file_object:
lines = file_object.readlines()
pi_string = ''
for line in lines:
pi_string += line.rstrip()
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.")
'''
Enter your birthday, in the form mmddyy: 1415
Your birthday appears in the first million digits of pi!
'''