Python进阶编程:文件和数据存储
Python文件和流
读文件和写文件
使用open()函数
打开文件: r w r+ w+
- r : 读文件
- w : 写文件
- r+ : 文件可读写,但是如果文件不存在,会抛出异常;存在的话,则是追加。通过seek函数可以改变当前的位置。
- w+ : 如果文件不存在,会创建一个新文件,文件存在的话,会覆盖原文件,也就是清空原来文件,写入新内容。
- a+ : 如果文件不存在,创建;存在的话,追加内容。
操作文件的函数:
- write(string):向文件写入内容,会返回写入文件的字节数。
- read([n]) :读取文件的内容,n是一个整数,表示从文件指针指定的位置开始读取的n个字节。如果不指定n,则从当前位置往后读取所有的字节。
- seek(n):重新设置文件指针,也就是改变文件当前位置。如果使用write函数需要使用seek(0)重置指针。
- close() : 关闭文件。
以r
写模式打开test.txt文件
1 | f = open('test.txt','w') |
以w
读模式打开test.txt文件
1 | f = open('test.txt','r') |
以r+
打开一个不存在的文件
1 | try: |
以w+
打开一个不存在的文件
1 | try: |
管道输出
什么是管道?即前一个命令的输出会作为下一个命令的输入。用|
Linux和mac有管道,windows没有。
1 | import sys |
读行和写行
读行readline()
1 | f = open('test.txt','r') |
写行
利用f.write('内容'+ os.linesep)
1 | import os |
使用FileInput对象读取文件
1 | import fileinput |
数据存储
XML
将字典转换为XML字符串
- 导入模块
1 | import dicttoxml |
- 定义一个字典
1 | d = [20,'names',{'name':"阿福",'age':20,'爱好':'旅游'}, |
- 将字典转换成XML格式(bytes形式)
1 | bxml = dicttoxml.dicttoxml(d,custom_root='p') |
如果你出现了以下错误,那么不要害怕
估计你的python也是3.10,把python的版本换成3.9就可以解决。
折腾了我一下午,真是….
解析xml字符串
1
2
3
4dom = parseString(xml) #xml现在太乱了,所以解析xml字符串
prettyxml = dom.toprettyxml(indent = ' ') #设置缩进,美观
print(prettyxml)写入文件
1
2
3
4
5import os
os.makedirs("files",exist_ok = True) #创建一个files文件夹,如果存在file文件夹就忽略
f = open('files/persons.xml','w',encoding='utf-8')
f.write(prettyxml)
f.close()
读取与检索XML文件
首先,导入相关的库
1 | import xml.etree.ElemenTree import parse |
接着找到文件位置
1 | doc = parse('files/afu.xml') |
读取
1 | from xml.etree.ElementTree import parse |
XML字符串转换成字典
先导入库import xmltodict
打开文件并解析
美观
1 | import xmltodict |
JSON
JSON转换成字典
- 使用
eval
函数将json字符串转换成为字典
1 | # 创建字典 |
使用
json.loads()
注意python文件不要命名成json.py !
1
2
3
4
5
6
7
8
9
10
11
12
13
14# 创建字典
import json
target = '''
{
"语文":111,
"数学":110,
"英语":109
}
'''
# 使用json.loads()将json字符串转换为字典
data = json.loads(target)
print(type(data)) # 查看data的类型
print(data)
字典转换成JSON
使用json.dumps()
1 | import json # 导入库 |
JSON转换成类实例(对象)
方法:利用loads函数
的object_hook关键字参数指定一个类或者一个回调函数。
先创建一个json文件(我的文件名是person.json)
- 指定一个类
1 | import json # 导入库 |
- 使用回调函数
1 | import json # 导入库 |
将类实例转换成JSON字符串
解决方案:利用dumps(将字典转换成字符串)
default
关键字参数指定一个回调函数,这个回调函数会接收一个类实例
回调函数需要返回一个字典,最后,dumps函数会将字典转换成JSON字符串
过程为: object –> dict –> JSON
1 | import json # 导入库 |
类实例列表与JSON字符串的转换
创建一个json文件
- json文件转换成类实例
1 | import json # 导入库 |
类实例转换成json文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28import json # 导入库
class Person:
def __init__(self,d):
self.__dict__ = d
f = open('person.json','r',encoding= 'utf-8')
jsonStr = f.read()
persons_to_list = json.loads(jsonStr,object_hook=Person)
print(type(persons_to_list))
for P in persons_to_list:
print('name = ',P.name)
print('age = ',P.age)
print('sex = ', P.sex)
print('addr = ', P.addr)
# 逆过程
def person_json(P):
return {
'name': P.name,
'age':P.age,
'sex':P.sex,
'addr':P.addr
}
jsonStr = json.dumps(persons_to_list,default=person_json,ensure_ascii=False)
print(jsonStr)
JSON转换成XML字符串
过程: json --> dict --> xml
1 | import json # 导入库 |
我的json文件
注意:json文件不要和对应的.py文件同在一个文件夹,不然会出问题,同时也建议本篇的博客都使用python3.9操作。
SQLite
未完待续
MySQL
未完待续
ORM
未完待续
非关系型数据库(NoSQL)(MongoDB)
未完待续
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 道坤!
评论