Python 文件读写
一、open
1.1 python 的 open 函数介绍
-
open函数介绍
当我们调用
open
函数时,该函数返回一个stream <class '_io.TextIOWrapper'>
-
获取文件操作对象
# 文件打开,如果没有文件则创建文件,仅限在 mode='w' 模式下 f = open('/Users/kylewhite/Downloads/a.txt', 'w')
-
文件读取
① 读取选定字节
# read():选择性读取 f = open('/Users/kylewhite/Downloads/a.txt', 'r') # 10 表示要从文件中读取的数据的长度(单位是字节),如果没有传入值,那么就表示读取文件中所有的数据 f.read(10) # 读取全部内容 f.read()
② 按行读取数据
# readlines():一次读取所有行数据 # 按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素 f = open('/Users/kylewhite/Downloads/a.txt', 'r') list1 = f.readlines() # # ['hellod\n', 'world\n'] print(list1)
# readline():一次只读取一行数据 f = open('/Users/kylewhite/Downloads/a.txt', 'r') content = f.readline() print(f'第一行:{content}') content = f.readline() print(f'第二行:{content}')
-
文件写操作
① 文件写入
# write() f = open('/Users/kylewhite/Downloads/a.txt', 'w') f.write('hello world')
② 偏移量读取文件
# seek(偏移量,开始位置) f = open('/Users/kylewhite/Downloads/a.txt', 'r') # 每次读取1M数据 f.seek(1024 * 1024, 0) f.close()
③ 文件关闭
# close() f = open('/Users/kylewhite/Downloads/a.txt', 'r') f.close()
1.2 使用demo
-
统计文件的行数
def file_read(path, encoding): """ 统计文件的行数 :param encoding: 文件字符编码 :param path: 文件路径 :return: 文件的行数 """ counter = 0 try: with open(path, 'r', encoding=encoding) as file: while file.readline(): counter += 1 except NotADirectoryError: print(f'路径为:{path}的文件不存在,请使用正确的路径!') print(f'文件读取完毕,共有{counter}行数据') if __name__ == '__main__': file_read('/Users/kylewhite/Downloads/20201210/CLIENT.dat', 'gbk')
二、zipfile
2.1 zipfile 介绍
-
zipfile 介绍
通过 zipfile 可以更便捷的做以下这些事情
① 获取
zip
的文件信息(zip包中的文件列表)② 解压
zip
包:建议通过shutil
进行文件解压③ 压缩
zip
包② 向
zip
包中追加文件 -
打开一个
zip
文件import zipfile with zipfile.ZipFile('/Users/kylewhite/Downloads/a.zip') as zip: xxxx
-
获取
zip
文件中的文件列表with zipfile.ZipFile('/Users/kylewhite/Downloads/a.zip') as zip: file_list = [file for file in zip.namelist()]
2.2 zipfile示例
-
向
zip
中追加文件# a :追加文件的模式 # /Users/kylewhite/Downloads/test.txt:要追加的文件路径 # /test.txt :zip包中的路径,该路径是zip的第一层目录 with zipfile.ZipFile('/Users/kylewhite/Downloads/a.zip'), 'a') as zip_file: zip_file.write('/Users/kylewhite/Downloads/test.txt', '/test.txt')
三、xml
3.1 xml介绍
-
xml 介绍
① 读取一个
xml
文件,并对文件中的某些节点内容及属性进行修改② 创建一个
xml
3.2 xml代码示例
-
创建一个
xml
文件doc = Document() # 创建第一个节点 application = doc.createElement('application') application.setAttribute('product_name', 'abc') application.setAttribute('product_no', '123') pplication.setAttribute('product_version', '1.0.0') doc.appendChild(application) # 创建application的子节点 files = doc.createElement('files') application.appendChild(files) # 创建files的子节点 file = doc.createElement('file') file.setAttribute('md5', '64591f434baac208caf52cba4f4b0092') file.setAttribute('size', '128327265') file.setAttribute('version', '1.0.0') files.appendChild(file) # 写入文件 with open('/Users/kylewhite/Downloads/test.xml', 'w') as f: doc.writexml(encoding='utf-8', writer=f, addindent="\t", newl="\n")
<?xml version="1.0" encoding="utf-8"?> <application product_name="abc" product_no="123" product_version="1.0.0"> <files> <file md5="64591f434baac208caf52cba4f4b0092" size="128327265" version="1.11.0"/> </files> </application>
-
读取
xml
文件并修改指定节点import xml.etree.cElementTree as ET if __name__ == '__main__': tree = ET.parse('/Users/kylewhite/Downloads/MANIFEST.xml') root = tree.getroot() for child in root.findall('files'): child.set('product_name', 'qwe') tree.write('/Users/kylewhite/Downloads/temp1.xml')
<?xml version="1.0" encoding="utf-8"?> <application product_name="abc" product_no="123" product_version="1.0.0"> <files> <file md5="64591f434baac208caf52cba4f4b0092" size="128327265" version="1.11.0"/> </files> </application>