第10章 文件与异常:10-1 从文件中读取数据

-- coding:utf-8 --

#li hongliang 2020年08月07日
#第10章 文件和异常
#10.1 从文件中读取数据
#10.1.1 读取整个文件
#https://www.nostarch.com/pythoncrashcourse 下载文件的链接
#要以任何方式使用文件——哪怕仅仅是打印其内容,都得先打开文件,这样才能访问它。函数open()接受一个参数:。函数open()返回一个表示文件的对象.
#关键字with在不再需要访问文件后将其关闭。
#下面的程序打开并读取这个文件,再将其内容显示到屏幕上:
with open(‘pi_digits.txt’) as file_object:
contents = file_object.read()
print(contents.rstrip())

#10.1.2 文件路径10.1.2 文件路径
#绝对路径通常比相对路径更长,因此将其存储在一个变量中,再将该变量传递给open()会有所帮助。在Linux和OS X中,绝对路径类似于下面这样:
#通过使用绝对路径,可读取系统任何地方的文件。就目前而言,最简单的做法是,要么将数据文件存储在程序文件所在的目录,要么将其存储在程序文件所在目录下的一个文件夹(如text_files)中。
#注意 Windows系统有时能够正确地解读文件路径中的斜杠。如果你使用的是Windows系统,且结果不符合预期,请确保在文件路径中使用的是反斜杠。

#10.1.3 逐行读取
print(’\n’)
filename= ‘pi_digits.txt’
with open(filename) as file_object:
for line in file_object:
print(line.rstrip())

#10.1.4 创建一个包含文件各行内容的列表
#使用关键字with时,open()返回的文件对象只在with代码块内可用。如果要在with代码块外
#访问文件的内容,可在with代码块内将文件的各行存储在一个列表中,并在with代码块外使用该
#列表:你可以立即处理文件的各个部分,也可推迟到程序后面再处理。
filename= ‘pi_digits.txt’
with open(filename) as file_object:
lines = file_object.readlines()
for line in lines:
print(line.rstrip())

#10.1.5 使用文件的内容
#将文件读取到内存中后,就可以以任何方式使用这些数据了。下面以简单的方式使用圆周率
#的值。首先,我们将创建一个字符串,它包含文件中存储的所有数字,且没有任何空格:
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 包含一百万位的大型文件
#前面我们分析的都是一个只有三行的文本文件,但这些代码示例也可处理大得多的文件。
#如果我们有一个文本文件,其中包含精确到小数点后1 000 000位而不是30位的圆周率值,也可
#创建一个包含所有这些数字的字符串。为此,我们无需对前面的程序做任何修改,只需将这个
#文件传递给它即可。在这里,我们只打印到小数点后50位,以免终端为显示全部1 000 000位而不断地翻滚
“”"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))"""

#运行结果:
#3.14159265358979323846264338327950288419716939937510…
#1000002

#注意 要运行这个程序(以及后面的众多示例),你需要从https://www.nostarch.com/pythoncrashcourse/
#下载相关的资源。

#10.1.7 圆周率值中包含你的生日吗
#我一直想知道自己的生日是否包含在圆周率值中。下面来扩展刚才编写的程序,以确定某个人的生日是否包含在圆周率值的前1 000 000位中。为此,可将生日表示为一个由数字组成的字符串,再检查这个字符串是否包含在pi_string中:

filename= ‘pi_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 birthday appears in the first million digits of pi!”)
else:
print(“Your birthday does not appear in the first million digits of pi.”)

#动手试一试
#10-1 Python 学习笔记:在文本编辑器中新建一个文件,写几句话来总结一下你至此学到的 Python 知识,其中每一行都以“In Python you can”打头。将这个文件命名为learning_python.txt,并将其存储到为完成本章练习而编写的程序所在的目录中。编写一个程序,它读取这个文件,并将你所写的内容打印三次:第一次打印时读取整个文件;第二次打印时遍历文件对象;第三次打印时将各行存储在一个列表中,再在 with 代码块外打印它们。
print(’\n’)
filename1 = ‘learning_python.txt’
with open(filename1) as file_object:
writes = file_object.read()
print(writes) #第一次打印时读取整个文件
print(’\n’)

with open(filename1) as file_object:
for line in file_object:
print(line.rstrip()) #第二次打印时遍历文件对象
print(’\n’)
with open(filename1) as file_object:
writes = file_object.readlines()
for write in writes:
print(write.rstrip()) #第三次打印时将各行存储在一个列表中

#10-2 C 语言学习笔记:可使用方法 replace()将字符串中的特定单词都替换为另一
#个单词。下面是一个简单的示例,演示了如何将句子中的’dog’替换为’cat’:

#>>> message = “I really like dogs.”
#>>> message.replace(‘dog’, ‘cat’)
##‘I really like cats.’
#读取你刚创建的文件 learning_python.txt 中的每一行,将其中的 Python 都替换为另
#一门语言的名称,如 C。将修改后的各行都打印到屏幕上。
print(’\n’)
filename1 = ‘learning_python.txt’
with open(filename1) as file_object:
tips = file_object.readlines()
for tip in tips:
tip.replace(‘Python’,‘Java’) #将其中的 Python 都替换为另#一门语言的名称Java
print(tip.replace(‘Python’,‘Java’).rstrip())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值