文章目录
第九章 文件
9.1 从文件中读取数据
9.1.1 读取整个文件
pi.txt
3.14159
26535
89793
with open('pi.txt','r') as file_object:
contents = file_object.read()
print(contents)
输出:
3.14159
26535
89793
with open()
可以不需要在访问文件后关闭,随着with的结束,文件会自动关闭open()
将目标文件打开,当做一个对象。read()
将文件中所有内容读取为一个长长的字符串- 输出的文本最后有空行是因为read()达到文件尾时会返回一个空字符串。消除空行可用rstrip()
9.1.2 逐行读取
with open('pi.txt','r') as file_object:
for line in file_object:
print(line)
输出:
3.14159
26535
89793
每行之间都有一个空行,是因为文本文件每行结尾都有一个换行符,而print()每次都会自动换行,所以多了一个换行。
将print(line)
改为print(line.rstrip())
即可解决
9.1.3 创建一个包含文件各行内容的列表
with open('pi.txt','r') as file_object:
lines = file_object.readlines()
for line in lines:
print(line.strip())
readlines()
读取文本中的每一行,并存储在一个列表里。
调用len()可以获知文件内容的行数。
这样可以让在with open结束后依然可以使用文本内容。
9.1.4 replace()替换字符串的内容
s = 'I Love C++'
s.replace('C++','Python')
print(s)
I Love Python
9.2 写入文件
9.2.1 写入空文件
with open('filename', 'w') as fo:
fo.write('I love you')
打开文件,会发现文件内容为:
I love you
9.2.2 写入多行
with open('filename', 'w') as fo:
fo.write('I love you')
fo.write('I love you too')
打开文件,会发现文件内容为:
I love youI love you too
write()不会像print()一样自动换行,所以要自己添加换行符。
with open('filename', 'w') as fo:
fo.write('I love you\n')
fo.write('I love you too')
9.2.3 在文件后附加内容
就是打开模式改为’a’
9.3 异常
9.3.1 ZeroDivisionError异常
如果程序中出现除以0的情况,程序将会反馈Traceback错误信息:ZeroDivisionError
9.3.2 try-except 代码块
当你认为可能发生错误时,可编写一个try-except
代码块来处理可能引发的异常。
try:
print(5/0)
except:
print("You can't divide by zero")
- 当
try
代码块出现异常时,Python将跳过try
代码块而去执行except
代码块。
9.3.3 else 代码块
num1 = 5
num2 = int(input())
answer = num1/num2
try:
print(5/0)
except:
print("You can't divide by zero")
else:
print(answer)
-当try
代码块执行成功时,将会接着执行else
代码块
9.3.4 FileNotFoundError异常
文件打开失败时会返回改错误
9.3.5 split()处理字符串
split()
函数将字符串根据空格分隔,并创建一个 单词列表
s = 'I love you'
words = s.split()
print(words)
[‘I’, ‘love’, ‘you’]
调用len()函数即可以获知字符串单词个数。
9.3.6 处理多个文件
有一种方法是将一系列文件名存在列表里:
files = ['f1.txt', 'f2.txt', 'f3.txt']
for filename in files:
with open(filename):
...
9.3.7 使用pass语句跳过异常语句
try:
print(5/0)
except:
pass
pass
语句会让Python什么都不做,“一声不吭”。