当前位置: 首页 > news >正文

3.31Python有关文件操作

1.复制文件

import os
from shutil ipmort copy,copytree

path = os.path.join(os.getcwd(),'test1.txt')
target_path = os.path.join(os.getcwd(),'test1copy')

copy(path,target_path)
copytree(path,target_path)

注意:test1.txt 和 test1copy 文件夹/包  都点存在 

os.path.join(os.getcwd(), 'test1.txt') 这行代码主要是用于构建一个文件的完整路径

getcwd 就是返回当前路径 类似 linux 的cwd 命令 返回当前路径  
os.path.join 是os模块中的一个函数  作用是将多个路径组合成一个完整的路径 
与string拼接不同的是  这个函数会根据不同的操作系统自动处理路径分隔符(在 Windows 系统中是 \,在 Linux 和 macOS 系统中是 /),确保生成的路径是符合当前操作系统规范的。

copytree 就是复制所有文件 

2. 文件的压缩/解压

# 文件的压缩
# 参1 :压缩文件名字
# 参2 :压缩格式,如zip,tar,gztar等
# 参3 :要压缩的文件夹路径/地址
zipfile = make_archive('test1copyzip','zip',os.path.join(os.getcwd(), 'test1copy'))
print(zipfile)


# 文件的解压
# 参1 :压缩文件名字
# 参3 :解压路径/地址
target = os.path.join(os.getcwd(), 'test2')
unpack_archive('test1copyzip.zip',target)
print('文件解压成功!')

主要用到的 包就是 make_archive 和  unpack_archive 

3. 文件夹剪切

# 文件夹剪切
# 参数1:目标 注意目标不存在会报错
# 参数2: 剪切的位置(剪切到哪里去)
move('test2','test1move')

4.文件夹删除

# 文件夹删除
rmtree('test2copy')

5. 查找文件

import os
from glob import glob

# 1.查找文件

target = os.getcwd()

# 1.1获取当前目录下的所有文件
result = glob(target +'/*')

 glob 就会返回一个列表 包含 你拼接的路径下的所有文件 * 可变 * 代表多个 ?代表一个 

6.查找文件目录中指定的文件

import glob

import os

# 凭借路径 这里是 当前路径下所有文件
path = os.path.join(glob.os.getcwd(),'*')

# 初始化列表 要查找的文件可能有多个
fianl_result = list();

# 构建函数需要遍历所有目录 使用递归

def search(path,target):
    # glob.glob 就会返回 path路径下的所有文件 以列表的形式
    result = glob.glob(path)
    # 我们遍历 result
    for data in result:
        # 判断是否是文件夹 如果是文件夹的话我们就使用递归继续遍历
        if os.path.isdir(data):
            # 拼接路径 后续通过 glob.glob 就可以获得所有文件 
            _path = os.path.join(data,'*')
            # 开始递归
            search(_path,target)
        else:
            if target in data:
                # 如果包含目标文件
                final_result.append(data)

     return fianl_result

if __name__ == '__main__':
    result = search(path,"test1.txt")
    print(result)

7. 查找指定内容

# 需求:对文件中的内容进行匹配查找,包含指定内容则查找出来
# 已知条件:文件会包含的指定内容,不知道文件名以及所有目录,只知道根目录
# 实现思路:利用glob从最外层开始查找 遍历根目录下所有文件,判断文件是否包含指定内容


import glob
import os
path = os.path.join(os.getcwd(),'*')

final_result = list()

def search(path,target):
    result = glob.glob(path)
    for data in result:
        if os.path.isdir(data):
            _path = os.path.join(data,'*')
            search(_path,target)
        else:
            # open 函数的功能用于打开文件
            # 参数1 文件的位置
            # 参数2 操作文件的方式 r 读取 w 输出 a 追加 b 二进制
            # 参数3 编码方式,默认utf-8
            f = open(data,'r',encoding='utf-8')
            try:
                content = f.read()
                if target in content: # 包含指定内容则加入到最终结果中
                    final_result.append(data)
            except:
                print('data read exception:%s' % data)
                continue
            finally:
                f.close()
    return final_result

if __name__ == '__main__':
    result = search(path,'他们朝我扔泥巴')
    print(result)







# 与查找文件类似 加了一个如果是文件的话 我们就打开 然后获得内容 判断内容是不是在当前这个文件里 如果在那么就 加到列表中 



# 在你提供的代码上下文中,path
# 是通过
# os.path.join(os.getcwd(), '*')
# 生成的,这意味着
# path
# 是当前工作目录下的所有文件和目录的路径模式。因此,result = glob.glob(path)
# 会返回一个包含当前工作目录下所有文件和目录路径的列表,并将其赋值给变量
# result

8.清理重复的文件(这里的判断重复是 如果名字相同并且大小一样就算重复)


import glob
import hashlib
import os.path

data = dict()  # 字典


def clear(path):
    result = glob.glob(path)
    for _data in result:
        if os.path.isdir(_data):
            _path = os.path.join(_data,'*') # 获得这个子目录下的所有文件路径
            clear(_path)  # 递归到子目录下
        else:
            # 获取这个文件的名子
            # os.path.split 这个函数 将一个路径拆解成两部分 目录名和文件名部分 最后一个就是文件名
            name = os.path.split(_data)[-1]
            # 判断是否是二进制文件 初始false
            is_byte = False
            if 'zip' in name:
                is_byte = True
                f = open(_data,'rb')
            else:
                f = open(_data,'r',encoding='utf-8')
            content = f.read()
            f.close()
            if is_byte:
                # 使用hashlib的md5方法读取文件 
                hash_content_obj = hashlib.md5(content)
            else:
               hash_content_obj = hashlib.md5(content.encode('utf-8')) # 利用hashlib的MD5方法读取文件
            hash_content = hash_content_obj.hexdigest() # 获取文件的hash值
            if name in data:  # 判断名字是否包含
                sub_data = data[name]
                is_delete = False
                for k,v in sub_data.items():
                    if v == hash_content:
                        os.remove(_data)
                        is_delete = True
                if not is_delete:
                    data[name][_data] = hash_content
            else:
                data[name] = {
                    _data:hash_content
                }


if __name__ == '__main__':
    path = os.path.join(os.getcwd(),'*')
    clear(path)
    for k,v in data.items():
        for _k,v in v.items():
            print(_k,v)


9.批量修文件名


import glob
import shutil
import os

def update_name(path):
    result = glob.glob(path)
    # 遍历枚举数据,index是自动生成的索引值 data遍历的元素
    for index,data in enumerate(result):
        if os.path.isdir(data):
            _path = os.path.join(data,'*')
            update_name(_path)
        else:
            # 获取文件名
            path_list = os.path.split(data)
            name = path_list[-1]
            # 将索引值和文件名合成一个新的文件名
            new_name = '%s_%s'%(index,name)
            new_data = os.path.join(path_list[0],new_name)
            shutil.move(data,new_data)

if __name__ == '__main__':
    path = os.path.join(os.getcwd(),'test1copy','*')
    # path += "\\test1copy"
    update_name(path)

相关文章:

  • 【java】Java核心知识点与相应面试技巧(九)——异常
  • PHP回调后门
  • Ubuntu22.04系统离线部署Maxkb【教程】
  • 再见VS Code!Google IDE 正颠覆传统开发体验
  • 探秘中医五色五味:开启饮食养生新智慧
  • Element ui input组件类型为 textarea 时没有 清空按钮
  • [网络_1] 因特网 | 三种交换 | 拥塞 | 差错 | 流量控制
  • Nordic 新一代无线 SoC nRF54L系列介绍
  • Tiny Lexer 一个极简的C语言词法分析器
  • 回溯(子集型):分割回文串
  • 如何在 Windows 上安装与配置 Tomcat
  • 基于PX4和Ardupilot固件下自定义MAVLink消息测试(QGroundControl和Mission Planner)
  • 76. pinctrl和gpio子系统试验
  • 【Easylive】HikariCP 介绍
  • 14:00开始面试,14:08就出来了,问的问题有点变态。。。
  • YOLO霸主地位不保?开源 SOTA 目标检测rf-detr 测评
  • UR机械臂sim2real推荐包
  • CUDA专题8—CUDA L2缓存完全指南:从持久化策略到性能优化实战
  • 代码随想录Day29
  • 学以致用,基于OpenCV的公摊面积估算程序
  • 顺义网站开发/网站ip查询站长工具
  • 东莞定制网站建设/什么是seo如何进行seo
  • 境外电商网站建设/中关村标准化协会
  • 网上商城web/优化师是一份怎样的工作
  • 樟木头仿做网站/求职seo推荐
  • 做别人的网站诈骗视频/瑞昌网络推广