3.31Python有关文件操作

news2025/4/2 17:14:13

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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2325970.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

搭建前端环境和后端环境

搭建前端环境 ①、安装vscode,并安装相应的插件工具 ②、安装node.js,可以选择当前版本,或者其他版本 ③、创建工作区 创建一个空文件夹,然后通过vscode工具打开,保存为后缀名为.code-workspace ④、从gitee…

Polhemus FastScan 单摄像头3D激光扫描器

FastSCAN Cobra是Polhemus公司研制的手持激光扫描仪。与以前的产品比较,它节省了30%的费用,体积也减小了一半 ,但仍然保留了所有功能,使用和携带都更加方便。作为超小的手持激光扫描仪,FastSCAN Cobra对扫描三维物体具…

召唤数学精灵

1.召唤数学精灵 - 蓝桥云课 问题描述 数学家们发现了两种用于召唤强大的数学精灵的仪式,这两种仪式分别被称为累加法仪式 A(n) 和累乘法仪式 B(n)。 累加法仪式 A(n) 是将从1到 n 的所有数字进行累加求和,即: A(n)12⋯n 累乘法仪式 B(n) …

2025图像处理和深度学习国际学术会议(IPDL 2025)

重要信息 官网:www.IPDL.xyz 时间:2025年4月11-13日 地点:中国-成都 简介 随着深度学习和图像处理技术的迅速发展,相关技术的应用逐渐渗透到各个行业,如医疗影像分析、自动驾驶、安防监控和智能制造等。这些应用的…

使用uni-app框架 写电商商城前端h5静态网站模板项目-手机端-前端项目练习

以前用vue2 分享过一个电商商城前端静态网站项目-电脑端,需要的小伙伴还是很多的,最近又花了几天更新了一个 手机端的 电商商城h5项目,今天也分享一下实现方案。 对于以前写的 电商商城前端静态网站模板-电脑端,有兴趣的小伙伴 可…

远心镜头原理

文章目录 原理特点分类应用领域 参考:B站优致谱视觉 原理 远心镜头的工作原理基于其特殊的光学设计,旨在解决普通镜头存在的视差问题。它通过将镜头的光轴与成像面垂直,并使主光线平行于光轴,从而确保在一定的物距范围内&#xf…

centos7修复漏洞CVE-2023-38408

漏洞描述: CVE-2023-38408 是 OpenSSH 组件中的一个远程代码执行(RCE)漏洞,影响 OpenSSH 代理(ssh-agent)的安全性。该漏洞被发现于 2023 年 7 月,并被标记为 高危(CVSS 评分 7.3&a…

uniapp微信小程序封装navbar组件

一、 最终效果 二、实现了功能 1、nav左侧返回icon支持自定义点击返回事件(默认返回上一步) 2、nav左侧支持既显示返回又显示返回首页icon 3、nav左侧只显示返回icon 4、nav左侧只显示返回首页icon 5、nav左侧自定义left插槽 6、nav中间支持title命名 7…

系统思考与心智模式

我们的生命为什么越来越长?因为有了疫苗,有了药物。可这些是怎么来的?是因为我们发现了细菌的存在。但在很久以前,医生、助产士甚至都不洗手——不是他们不负责,而是根本不知道“细菌”这回事。那细菌是怎么被发现的&a…

数据库--数据库设计

目录: 1.数据库设计和数据模型 2.概念结构设计:E-R模型 3.逻辑结构设计:从E-R图到关系设计 4.数据库规范化设计理论 5.数据库规范化设计实现 1.数据库设计和数据模型 数据库设计会影响数据库自身和上层应用的性能。 一个好的数据库设计可以提…

[Mac]利用hexo-theme-fluid美化个人博客

接上文,使用Fluid美化个人博客 文章目录 一、安装hexo-theme-fluid安装依赖指定主题创建「关于页」效果展示 二、修改个性化配置1. 修改网站设置2.修改文章路径显示3.体验分类和标签4.左上角博客名称修改5.修改背景图片6.修改关于界面 欢迎大家参观 一、安装hexo-theme-fluid 参…

黑盒测试的场景法(能对项目业务进行设计测试点)

定义: 通过运用场景来对系统的功能点或业务流程的描述,设计用例遍历场景,验证软件系统功能的正确性从而提高测试效果的一种方法。 场景法一般包含基本流和备用流。 基本流:软件功能的正确流程,通常一个业务只存在一个基本流且基本流有一个…

通过Anaconda Prompt激活某个虚拟环境并安装第三方库

打开 Anaconda Prompt 在Windows中,可以通过开始菜单搜索 Anaconda Prompt 来打开。(红色箭头指向的地方。) 激活虚拟环境 输入以下命令来激活您的虚拟环境(假设虚拟环境名称为 myenv): conda activate…

全长约8.3公里!宁波象山港跨海大桥南中塔柱云端合龙

快科技3月31日消息,据报道,由中国交建二航局承建的宁波象山港跨海大桥顺利完成南中塔柱合龙施工,标志着这一重大交通工程取得阶段性突破。 这座连接宁波鄞州区与象山县的跨海通道全长8.3公里,其标志性的南主塔采用创新"钻石…

使用 2 端口探头测量 40 uOhm(2000 安培)PDN 的挑战 – 需要多少 CMRR?

部分 1 / 3 本文是 3 部分系列的第一部分: 第 2 部分 - 测量结果! 第 3 部分 - 使用另一台 VNA 的测量结果 介绍 我们大多数人都知道 2 端口测量中的接地回路。我们大多数人也都知道,我们需要引入接地回路隔离器来纠正错误。如果没有&…

蓝桥杯——统计子矩阵

解法&#xff1a;二维前缀和双指针 代码&#xff1a; #include <iostream> using namespace std; typedef long long ll; ll prefix[505][505], a[250010]; int main() {ll n, m, k, ans 0; cin >> n >> m >> k;for(int i 1; i < n; i)for(int …

吾爱破解安卓逆向学习笔记(4p)

学习目标&#xff0c;了解安卓四大组件&#xff0c;activity生命周期&#xff0c;同时了解去除部分广告和更新提示。 广告类型 1.启动页广告 2.更新广告 3.横幅广告 安卓四大组件 组件描述Activity(活动)在应用中的一个Activity可以用来表示一个界面&#xff0c;意思可以…

stm32第十天外部中断和NVIC讲解

一&#xff1a;外部中断基础知识 1.STM32外部中断框架 中断的概念&#xff1a;在主程序运行过程中&#xff0c;出现了特点的中断触发条件&#xff0c;使得CPU暂停当前正在运行的程序&#xff0c;转而去处理中断程序&#xff0c;处理完成后又返回原来被暂停的位置继续运行 1&…

26考研——线性表_ 线性表的链式表示_单链表(2)

408答疑 文章目录 三、 线性表的链式表示单链表概念单链表的结构头结点 单链表上基本操作的实现单链表的初始化带头结点和不带头结点的初始化操作注意 求表长操作按序号查找结点按值查找表结点插入结点操作扩展&#xff1a;对某一结点进行前插操作 删除结点操作扩展&#xff1a…

MATLAB 控制系统设计与仿真 - 31

二次型最优控制 考虑到系统如果以状态空间方程的形式给出&#xff0c;其性能指标为&#xff1a; 其中F,Q,R是有设计者事先选定。线性二次最优控制问题简称LQ(Linear Quadractic)问题,就是寻找一个控制,使得系统沿着由指定初态出发的相应轨迹,其性能指标J取得最小值。 LQ问题分…