文件
在Python之中读写一个文件我们使用它的内置函数open
来进行操作。
写读写文件如下:
读文件时需要注意的是encoding的参数指定编码(写文件也同理):
# 第一种读取文件方式
fs = open('hello.txt', 'r', encoding='utf-8')
# 读所有的东西
content = fs.read()
print(content)
fs.close()
# 第二种读取文件方式
# 使用with op () as name: 的时候可以不用close
with open('../abc/hello.txt', 'r', encoding='utf-8') as fs:
# ./ abc找到本目录的abc ../abc 找到上一级目录的abc ../../找到上上级目录中的文件
# 将文件用数组保存
mylist = fs.readlines()
print(mylist)
写文件:
# 异常机制 - 处理程序在运行过程中出现的意外状况的手段
# 因为不是所有的问题都能够在写程序调试程序的售后就能发现
# 代开文件 ----> 判断大小 ----> 分配内存 ----> 读取文件 -----> 关闭文件
def main():
try:
with open('hello.txt', 'w', encoding='utf-8') as fs: # w完全改写文件 a表示追加问价
fs.write('我想做燕子\n')
fs.write('想做一只风中的野狼\n')
fs.write('我想吃兔子')
except FileNotFoundError as e:
print(e)
print('指定的文件无法打开')
except IOError:
print('读写文件时错误')
print('程序执行结束.')
if __name__ == '__main__':
main()
我们同样也可以读取一个二进制的文件wb,rb
def main():
try:
with open('../abc/mm.jpg', 'rb') as fs: # 读取一个二进制的文件,这个时候就可以不用encoding
data = fs.read() # 将读取的数据保存在data中
print(type(data))
with open('../efg/girl.jpg', 'wb') as fs2: # 写一个二进制的文件
fs2.write(data) # 将data写入girl.jpg中
except FileNotFoundError as e:
print(e)
print('指定的文件无法打开')
except IOError:
print('读写文件时错误')
print('程序执行结束.')
if __name__ == '__main__':
main()
json文件
当我们想要将列表或者字典类的数据进行保存的时候,就要使用Json的格式进行保存数据
{
'name': 'ljl',
'age': 18,
'qq': 111222,
'friends': ['李元芳', '王大锤'],
'car': [
{'brand': 'auto', 'speed': 120},
{'brand': 'Benz', 'speed': 160},
{'brand': 'QQ', 'speed': 100}
],
'num': [[123, 321], [456, 654], [789, 987]]
}
从上面我们可以看出,Json中的数据类型和Python中的数据类型很容易找到对应的关系,如下图:
我们就可以使用Python中的json来保存json格式的数据文件:
import json
def main():
mydict = {
'name': 'ljl',
'age': 18,
'qq': 111222,
'friends': ['李元芳', '王大锤'],
'car': [
{'brand': 'auto', 'speed': 120},
{'brand': 'Benz', 'speed': 160},
{'brand': 'QQ', 'speed': 100}
],
'num': [[123, 321], [456, 654], [789, 987]]
}
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()
Json中有4个比较重要的模块:
dump - 将Python对象按照JSON格式序列化到文件中
dumps - 将Python对象处理成JSON格式的字符串
load - 将文件中的JSON数据反序列化成对象
loads - 将字符串的内容反序列化成Python对象
import requests
import json
def main():
resp = requests.get('http://api.tianapi.com/meinv/?key=Key&num=10') # 得到url
mydict = json.loads(resp.text) # 将设置需要得到的文件格式
for tempdict in mydict['newslist']: # 利用循环取出字典中的每一个值
pic_url = tempdict['picUrl'] # 得到列表中的某一个字段
resp = requests.get(pic_url) # 请求得到该数据
filename = pic_url[pic_url.rfind('/') + 1:] # 得到需要的文件名
try:
with open(filename, 'wb') as fs:
fs.write(resp.content) # 保存数据 可以是文本也可以是二进制的数据
print("下载完成")
except IOError as e:
print(e)
if __name__ == '__main__':
main()