Python3 文件和异常

逆流者 2020年11月05日 114次浏览

从文件中读取数据

  • 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 目录

  1. Python3 教程
  2. Python3 变量和简单数据类型
  3. Python3 列表
  4. Python3 操作列表
  5. Python3 if 语句
  6. Python3 if 字典
  7. Python3 用户输入和while循环
  8. Python3 函数
  9. Python3 类
  10. Python3 文件和异常
  11. Python3 测试代码
  12. Python3 使用matplotlib绘制图表
  13. Python3 使用Pygal生成矢量图形文件
  14. Python3 使用csv模块处理CSV(逗号分割的值)格式存储的天气数据
  15. Python3 处理JSON格式数据(制作交易收盘价走势图)
  16. Python3 使用API