从文件中读取数据
- open()函数: 打开文件, 它会返回一个文件对象
- with 关键字 作用是在不需要访问文件后将其关闭
读取整个文件
先准备一个文件:
china.txt
我爱你中国
我和我的祖国
台湾是祖国不可分割的一部分
# 读取整个文件
with open('china.txt') as file_object:
contents = file_object.read()
print(contents)
打印结果:
我爱你中国
我和我的祖国
台湾是祖国不可分割的一部分
逐行读取
# 逐行读取
filename = 'china.txt'
with open(filename) as file_object:
for line in file_object:
# 文件中的换行符也会读取出来
print(line)
我爱你中国
我和我的祖国
台湾是祖国不可分割的一部分
代码中的filename可以是相对路径也可以是绝对路径
创建一个包含文件各行内容的列表
# 创建一个包含文件各行内容的列表
# readlines() 表示读取文件中的每一行并将其储存在列表中
filename = 'china.txt'
with open(filename) as file_object:
lines = file_object.readlines()
for line in lines:
print(line.rstrip())
我爱你中国
我和我的祖国
台湾是祖国不可分割的一部分
- rstrip() 去除行尾空格
使用文件的内容
# 使用文件的内容
with open(filename) as file_object:
lines = file_object.readlines()
c_str = ''
for line in lines:
c_str += line.rstrip()
print(c_str)
print(len(c_str))
我爱你中国 我和我的祖国 台湾是祖国不可分割的一部分
26
写入文件
写入文件
filename = 'programming.txt'
# w 表示写入模式, 还有 r 读取模式, a 附加模式, r+读取和写入文件的模式, 省略模式实参,默认为只读
with open(filename, 'w') as file_object:
# 多条语句可以写入多行
file_object.write('我喜欢编程.\n')
file_object.write('我喜欢创建一个新的游戏.\n')
运行可看到写入的文件内容:
我喜欢编程.
我喜欢创建一个新的游戏.
附加到文件
# 附加到文件, 就是给文件添加内容, 而不是覆盖
filename = 'programming.txt'
with open(filename, 'a') as file_object:
# 多条语句可以写入多行
file_object.write('我喜欢python.\n')
file_object.write('我喜欢java.')
运行之后就可以看到programming.txt文件的内容:
我喜欢编程.
我喜欢创建一个新的游戏.
我喜欢python.
我喜欢java.
异常
try:
# 执行代码
except ZeroDivisionError as error:
# 发生异常执行的代码
else:
# 没有发生异常执行的代码
finally:
# 无论异常是否发生都会执行
处理ZeroDivisionError异常
division.py
print(5/0)
运行它会报错:
Traceback (most recent call last):
File "/Users/wushanghui/Documents/code/codechina/python3-learn/base/division.py", line 1, in <module>
print(5/0)
ZeroDivisionError: division by zero
使用 try-except 代码块
try:
print(5/0)
except ZeroDivisionError:
print("You can't divide by zero!")
You can't divide by zero!
使用异常避免崩溃
print('得到两个数来进行除法运算')
print("输入 'q' 退出")
while True:
first_number = input('\n第一个数: ')
if first_number == 'q':
break
second_number = input('第二个数: ')
if second_number == 'q':
break
try:
answer = int(first_number) / int(second_number)
except ZeroDivisionError:
print("You can't divide by zero!")
else:
print(answer)
处理FileNotFoundError异常
filename = 'alice.txt'
try:
with open(filename) as f_obj:
contents = f_obj.read()
except FileNotFoundError:
msg = 'Sorry, the file ' + filename + ' does not exist.'
print(msg)
读取一个不存在的文件alice.txt
Sorry, the file alice.txt does not exist.
失败时一声不吭
pass语句
filename = 'alice.txt'
try:
with open(filename) as f_obj:
contents = f_obj.read()
except FileNotFoundError:
pass
存储数据
使用json.dump()和json.load()
json.dump()
number_writer.py
import json
numbers = [2, 4, 5, 7, 1, 9]
filename = 'numbers.json'
with open(filename, 'w') as f_obj:
json.dump(numbers, f_obj)
生成了numbers.json文件
json.load()
import json
filename = 'numbers.json'
with open(filename) as f_obj:
numbers = json.load(f_obj)
print(numbers)
[2, 4, 5, 7, 1, 9]
Python3 目录
评论