从文件中读取数据:读取整个文件-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!
'''

 

posted @ 2021-09-18 16:26  逍遥abin  阅读(519)  评论(0编辑  收藏  举报