日期:2021年1月28日
今天是学习Python的第十一天,今天的文件读写操作和C++差不多,拓展了JSON。
学习用的教材是GitHub上骆昊编写的《Python - 100天从新手到大师》
一、文件操作
Python中可以使用内置的
open
函数,指定文件名、操作模式、编码信息等来获得操作文件的对象,对文件进行读写操作。
操作模式 | 具体含义 |
---|---|
r | 读取(默认) |
w | 写入(会先截断之前的内容) |
x | 写入,如果文件已经存在会产生异常 |
a | 追加,将内容写入到已有文件的末尾 |
b | 二进制模式 |
t | 文本模式(默认) |
+ | 更新(即可以度又可以写) |
二、读写文本文件
使用
open
时,需要给定参数,分别为文件名、文件操作模式(如不指定默认为r
)、通过encoding
指定编码(如不指定默认为None,即系统默认编码)
读写操作:
def main():
# 写操作
f=open('abc.txt','w',encoding='utf-8') # w模式下如无文件会自动创建文件
f.write("Hello,world!")
f.close()
# 读操作
f=open('abc.txt','r',encoding='utf-8')
print(f.read())
f.close
if __name__=='__main__':
main()
💡 如果想以追加方式写入文件,使用a
模式。如果不想写close函数,可以使用with
关键字,它可以指定文件对象的上下文环境并离开时自动释放文件资源。其使用方法示例如下:
with open('abc.txt','r',encoding='utf-8') as f:
print(f.read())
r
模式下,如果open
指定的文件不存在或者无法打开,会造成程序异常,这时候需要采用Python的异常机制来避免出现异常。
def main():
try: # 异常机制程序标志
# 运行中可能会异常的代码
with open('abc.txt', 'r', encoding='utf-8') as f:
print(f.read())
# 找不到文件
except FileNotFoundError:
print('无法打开指定的文件!')
# 指定了未知编码
except LookupError:
print('指定了未知的编码!')
# 无法按指定编码解码
except UnicodeDecodeError:
print('读取文件时解码错误!')
finally: # 异常机制结束后运行(总是运行)
pass
if __name__ == '__main__':
main()
Python的读写操作除了read
、write
外,还支持逐句进行读写,关键字分别为readline
、writeline
,和C++用法一样。
三、读写二进制文件
和txt是差不多的,二进制文件在操作模式参数多加一个
b
,下面是实现文件复制的案例:
def main():
try:
with open('a.png', 'rb') as f1:
data = f1.read()
print(type(data)) # <class 'bytes'>
with open('b.png', 'wb') as f2:
f2.write(data)
except FileNotFoundError:
print('指定的文件无法打开.')
except IOError:
print('读写文件时出现错误.')
print('程序执行结束.')
if __name__ == '__main__':
main()
四、读取JSON文件
JSON是JavaScript Object Notation的缩写,它使用JavaScript语言编写,被广泛的应用于跨平台跨语言的数据交换,因为JSON也是纯文本,任何系统任何编程语言处理纯文本都是没有问题的。
比如,常用的ss代理配置:
{
"server":"0.0.0.0",
"server_port":8388,
"local_address":"127.0.0.1",
"local_port":1080,
"password":"password",
"timeout":600,
"method":"aes-256-cfb"
}
拓展:JSON就好比Python中的字典,JSON的数据类型和Python的数据类型可以找到对应关系
JSON | Python |
---|---|
object | dict |
array | list |
string | str |
number (int / real) | int / float |
true / false | True / False |
null | None |
Python | JSON |
---|---|
dict | object |
list, tuple | array |
str | string |
int, float, int- & float-derived Enums | number |
True / False | true / false |
None | null |
使用Python中的json模块就可以将字典或列表以JSON格式保存到文件中,代码如下所示
import json
def main():
mydict = {
'name': 'Paranoid',
'email': 'administrator@svip886.cn',
'qq': 297300226,
'friends': ['张三', '李四'],
'cars': [
{'brand': 'BYD', 'max_speed': 180},
{'brand': 'Audi', 'max_speed': 280},
{'brand': 'Benz', 'max_speed': 320}
]
}
try:
with open('data.json', 'w', encoding='utf-8') as fs:
json.dump(mydict, fs)
except IOError as e:
print(e)
print('保存数据完成!')
if __name__ == '__main__':
main()