文件与异常
约 792 个字 60 行代码 预计阅读时间 3 分钟
文件读写
Python 提供了内置的 open(filename, mode='r', encoding=None) 函数用于打开文件,返回一个文件对象,常用于读写文本或二进制数据。
模式参数(mode)说明
| 模式 | 含义 |
|---|---|
"r" |
只读模式,文件不存在会抛出异常(FileNotFoundError) |
"w" |
写入模式,文件不存在则创建,存在则清空原内容 |
"a" |
追加模式,写入内容追加到文件末尾 |
"b" |
二进制模式(可与 r/w/a 组合使用) |
"t" |
文本模式,默认值(也可与其他模式组合) |
文件基本操作
| 方法 | 说明 |
|---|---|
read([size]) |
读取文件内容,参数为读取的字节数,不写默认读取所有内容 |
readline() |
读取一行内容(包含换行符) |
readlines() |
读取所有行,返回列表(包含换行符) |
write(s) |
向文件写入字符串,如果本身有内容会覆盖 |
writelines(list) |
向文件写入字符串列表 (无自动换行) |
seek(offset, whence=0) |
设置读写位置;whence=0表示从文件开头,1表示当前位置,2表示文件末尾 |
tell() |
返回当前文件读写位置,windows下换行符是两个字符 |
close() |
关闭文件,释放资源 |
使用 with
with语句会创建一个上下文管理器对象,它用于规定某个对象的使用范围,相当于你可以认为这个对象离开它的作用域会自动析构(连接之类的东西是自动关闭),使用它可以有效的管理资源。
# 退出循环自动释放资源
with open("score.txt", "r", encoding="utf-8") as f:
for line in f:
print(line.strip()) # strip() 去除换行符
特殊输入读取
标准输入读多行数据,可使用 sys.stdin.readlines():
import sys
# sys.stdin 是标准输入流,即standard inputstream
lines = sys.stdin.readlines()
for line in lines:
print(line.strip())
异常处理
Python 的异常处理使用 try-except 语句块进行,不是catch。
基本结构
捕获所有异常:
抛出异常 raise
assert 断言
Python 的断言本质上也是抛出错误
assert 条件表达式:若条件为False,抛出AssertionErrorassert 条件, 错误信息:可自定义异常信息
CSV
CSV 是一种逗号分隔值 (Comma Separated Values) 文件格式,它是纯文本,而Excel是二进制文件。它是一种简单的文本格式,用于存储表格数据,比如电子表格或数据库。
Python内置了csv,因为CSV本身是纯文本,所以是比较好处理的:
import csv
with open('your_file.csv', 'r', encoding='utf-8') as file:
# csv.reader 返回一个迭代器
reader = csv.reader(file)
header = next(reader) # 读取标题行
print(f"标题行: {header}")
for row in reader:
print(f"数据行: {row}")
但是上面这种和readline其实没什么区别,用的更多的是
import csv
with open('your_file.csv', 'r', encoding='utf-8') as file:
# 将每一行数据读取为一个字典,字典的键是标题行的列名,值是该行对应列的数据。
reader = csv.DictReader(file)
for row in reader:
print(f"姓名: {row['姓名']}, 年龄: {row['年龄']}, 城市: {row['城市']}")
写的话也是类似的
# 不指定newline很可能会出现多余的换行
with open('output.csv', 'w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerows(data_to_write)
字典形式
import csv
data_to_write = [
['姓名', '年龄', '城市'],
['赵六', '28', '深圳'],
['孙七', '33', '杭州']
]
with open('output_semicolon.csv', 'w', newline='', encoding='utf-8') as file:
writer = csv.writer(file, delimiter=';')
writer.writerows(data_to_write)
print("使用分号分隔的数据已成功写入 output_semicolon.csv 文件")
json
json(javascript object notion JS的对象表示法),JSON 独立于语言,json是纯文本。JSON 字符串必须使用双引号,主要是为了不同编程语言的规范,单双引号未必相同。
Python本身就是一个巨大的字典,而json也是字典,所以转化起来是很容易的,Python内置的json库就提供了支持:
json.dumps(obj):将python对象序列化为json格式的字符串json.dump(obj, file):将python对象序列化为json格式并写入文件json.loads(json):将json风格的字符串反序列化为python对象json.load(json,json):将文件中的内容反序列为python对象
除此之外还有pickle,区别是不是转化到文本,而是字节流