美文网首页
Python文件操作

Python文件操作

作者: 逆风飞翔的鸟 | 来源:发表于2024-06-19 11:12 被阅读0次

    本文介绍如何使用Python实现对文件、目录以及压缩包的操作。

    一、文件操作

    1、创建文件

    with open("example.txt", "w") as file:
        # 在这里进行文件操作
        pass
    

    2、删除文件

    如果文件不存在,将会抛出文件不存在的异常。注意只能删文件,如果给了一个文件夹路径则会报错。

    import os
    
    try:
        os.remove('example.txt')
        print('文件删除成功')
    except Exception as e:
        print('文件删除失败', e)
    

    3、拷贝文件

    import shutil
        
    shutil.copy('example.txt','./new_folder')
    shutil.copy('example.txt','./new_folder/new_file.txt')
    

    两种实现方案:

    • 第二个参数写某个文件夹位置,则复制到该文件夹下;
    • 第二个参数写文件路径,复制到这个路径并且重命名。

    4、移动文件

    import shutil
        
    shutil.copy('example.txt','./new_folder/')
    shutil.move('example.txt','new_folder/new_file.txt')
    

    两种方式使用:

    • 第二个参数是文件夹位置,则移动到文件夹下面
    • 第二个参数是文件路径,移动到这个路径并且重命名
      注意:如果是文件夹后面一定要加'/'

    5、重命名文件

    import os
        
    os.rename('old_file.txt','new_file.txt')
    

    6、查询文件

    (1)字符串内置方法

    .startswith(),.endswith()

    (2)glob模块

    import glob
        
    print(glob.glob('*.py'))
        
    print(glob.glob('**/*.txt',recursive=True))
    
    模式 意义
    匹配所有
    ? 匹配任何单个字符
    [seq] 匹配seq中的任何字符
    [!seq] 匹配任何不在seq中的字符

    **表示任意层文件或文件夹 recursive=True会不断进入文件夹内

    7、打印文件信息

    import os
        
    for file in os.scandir('./'):
        print(file.stat())
    

    os.scandir()返回的文件都可以查询信息

    • st_size: 文件的体积大小(单位:bytes),除以10024就是KB
    • st_atime: 文件的最近访问时间
    • st_mtime:文件的最近修改时间
    • st_ctime:Windows下表示创建时间
    • st_birthtime:只在Mac、Linux下可用,表示创建时间

    8、读文件

    (1)read()方法

    read()方法用于读取整个文件的内容,并将其存储为一个字符串。

    
    file = open('example.txt', 'r')
    
    content = file.read()
    
    print(content)
    

    (2)readlines()方法

    readlines()方法用于读取整个文件的内容,并将其存储为一个列表,列表中的每个元素表示文件中的一行。

    file = open('example.txt', 'r')
    
    lines = file.readlines()
    
    for line in lines:
        print(line)
    

    (3) readline()方法

    readline()方法用于读取文件的一行内容,并将其存储为一个字符串。

    file = open('example.txt', 'r')
    
    line = file.readline()
    
    print(line)
    

    4、写文件

    文件读写模式:

    打开模式 文件类型 方式 对已有文件影响 如果文件不存在 备注
    r 文本 只读 抛异常 write等方法不可用
    rb 二进制 只读 抛异常 write等方法不可用
    r+ 文本 读写 追加 抛异常
    rb+ 二进制 读写 追加 抛异常
    w 文本 只写 覆盖并新建 新建 read等方法不可用
    wb 二进制 只写 覆盖并新建 新建 read等方法不可用
    w+ 文本 读写 覆盖并新建 新建 因为覆盖原来文件,read等方法获取到原文件的内容
    wb+ 二进制 读写 覆盖并新建 新建 因为覆盖原来文件,read等方法获取到原文件的内容
    a 文本 追加 追加到最后 新建 read等方法不可用
    ab 二进制 追加 追加到最后 新建 read等方法不可用
    a+ 文本 读写 追加到最后 新建
    ab+ 二进制 读写 追加到最后 新建

    (1)写入字符串数据

    # 写入字符串数据
    with open("example.txt", "w") as file:
        file.write("Hello, World!\n")
        file.write("This is a new line.")
    

    (3)写入字节数据

    • 使用write()方法将字节数据写入文件。
    • 可以使用encode()方法将字符串转换为字节数据进行写入。
    # 写入字节数据
    with open("example.txt", "wb") as file:
        content = "Hello, World!\n"
        file.write(content.encode("utf-8"))
    

    (4)writelines()

    写入list内容,不会在元素之间自动添加换行符。

     
    with open('example.txt','w',encoding='utf-8') as f:
        lines = [
        '春夜喜雨\n',
        '杜甫 [唐代]\n',
        '好雨知时节,当春乃发生。\n',
        '随风潜入夜,润物细无声。\n',
        '野径云俱黑,江船火独明。\n',
        '晓看红湿处,花重锦官城。\n']
        f.writelines(lines)
    

    二、目录操作

    1、遍历文件夹

    (1)列出当前文件夹下所有的文件和文件夹

    import os
    
    os.listdir()
    os.listdir('指定目录')
        
    for file in os.scandir():
        print(file.name, file.is_dir())
    

    判断文件还是文件夹:

    import os
    
    os.path.isdir('example')
    os.path.isfile('example')
    

    (2)遍历目录下所有的文件

    import os
    for dirpath, dirnames, files in os.walk('./'):
        print(f'发现文件夹:{dirpath}')
        print(files)
    

    dirpath 是文件夹路径; dirnames是dirpath这个文件夹下的子文件夹列表; files是dirpath这个文件夹里的文件列表。

    2、创建文件夹

    (1)创建单层文件夹

    import os
    
    os.mkdir('新文件夹')
    

    放文件夹已经存在时运行这句代码会报错,FileExisitsError

    import os
    
    if not os.path.exists('新文件夹'):
        os.mkdir('新文件夹')
    

    只有当文件夹不存在的时候创建文件夹。

    (2)创建多层文件夹

    import os
    
    os.makedirs('第一层文件夹/第二层文件夹/第三层文件夹')
    

    当最里层文件夹已经存在时(第三层)运行这句代码会报错。

    3、删除文件夹

    import shutil
        
    shutil.rmtree('文件夹')
    

    4、复制文件夹

    import shutil
        
    shutil.copytree('文件夹1','文件夹2')
    

    会将文件夹内的所有文件和文件夹都复制过去,新的文件夹不能已经存在。

    5、移动文件夹

    shutil.move(要移动的文件/文件夹,要移动的位置)

    import shutil
        
    shutil.move('folder_1','new_folder/')
    shutil.move('folder_2','new_folder')
    

    两种方式使用:

    • 第二个参数是文件夹位置,则移动到文件夹下面
    • 第二个参数是文件路径,移动到这个路径并且重命名
      注意:如果是文件夹后面一定要加'/'

    6、重命名文件夹

    import os
        
    os.rename('old_folder','new_folder')
    

    7、查找文件夹

    字符串内置方法:.startswith(),.endswith()

    8、路径拼接(解决跨平台问题)

    Windows中采用反斜杠()作为作为文件夹之间的分隔符; Mac和Linux中采用正斜杠(/)作为文件夹之间的分割符。

    为了解决跨平台的不一致,使用os模块下的系统函数进行拼接:

    import os
    
    os.path.join('MyApp', 'service')
    

    Windows:MyApp\\service, Mac和LinuxMyApp/service

    三、压缩文件

    1、读取压缩文件

    import zipfile
        
    with zipfile.ZipFile('压缩包.zip','r') as zipobj:
        print(zipobj.namelist())
    

    乱码情况处理:

    for file_name in zipodj.namelist():
        print(file_name.encode('cp437').decode('gbk'))
    

    2、获取压缩包文件信息

    import zipfile
        
    with zipfile.ZipFile('压缩包.zip','r') as zipobj:
        for file_name in zipobj.namelist():
            info = zipobj.getinfo(file_name)
            print(info.file_size,info.compress_size)
    

    file_size是原始文件的大小,compress_size是压缩后大小,输出单位为字节。

    3、解压压缩包

    zipobj.extract(压缩包要解压的文件名,解压到的位置)

    import zipfile
    
    with zipfile.ZipFile('压缩包.zip','r') as zipobj:
        zipobj.extract('压缩包内压缩的文件名','解压到的指定目录')
    

    中文名字解压后会出现乱码 乱码解决:

    for file_name in zipobj.namelist():
        correct_path = file_name.encode('cp437').decode('gbk')
    

    建议路径中文件和文件夹不要出现中文。 如果有中文可以现货区正确的编码文字,再重命名。

    4、提取压缩包文件

    默认当前路径:

    import zipfile
    
    with zipfile.Zipfile('压缩包.zip','r') as zipobj:
        zipobj.extractall()
    

    带密码的压缩文件解压:

    import zipfile
    
    with zipfile.Zipfile('压缩包.zip','r') as zipobj:
        zipobj.extractall(path='指定解压目录',pwd=b'设置的密码')
    

    5、创建压缩包

    import zipfile
        
    file_list = ['1.txt','2.txt','3.txt']
        
    with zipfile.ZipFile('压缩成的压缩包名称.zip','w') as zipobj:
        for file in file_list:
            zipobj.write(file)
    

    mode='a' 表示追加。

    相关文章

      网友评论

          本文标题:Python文件操作

          本文链接:https://www.haomeiwen.com/subject/odpqcjtx.html