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>
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值