Python运维学习Day01-文件基本操作

news2024/11/29 6:38:52

这里写自定义目录标题

  • 1.遍历目录下所有的文件
    • 1.1 这里主要利用os.walk 函数的功能
  • 2. 计算文件的 MD5 值
  • 3. 我们组合下两个函数,遍历下某个文件夹下的文件的md5码

1.遍历目录下所有的文件

def getFileName(directory):
    file_list = []
    for dir_name, sub_dir,file_name_list in os.walk(directory):
        #print(dir_name,sub_dir,file_list)
        if file_name_list:
            for file in file_name_list:
                file_path_abs = fr'{dir_name}/{file}'
                file_list.append(file_path_abs)
    return file_list

1.1 这里主要利用os.walk 函数的功能

我们看下os.walk的用法

In [6]: os.walk??
Signature: os.walk(top, topdown=True, onerror=None, followlinks=False)
Source:
def walk(top, topdown=True, onerror=None, followlinks=False):
    """Directory tree generator.

    For each directory in the directory tree rooted at top (including top
    itself, but excluding '.' and '..'), yields a 3-tuple

        dirpath, dirnames, filenames

    dirpath is a string, the path to the directory.  dirnames is a list of
    the names of the subdirectories in dirpath (excluding '.' and '..').
    filenames is a list of the names of the non-directory files in dirpath.
    Note that the names in the lists are just names, with no path components.
    To get a full path (which begins with top) to a file or directory in
    dirpath, do os.path.join(dirpath, name).

    If optional arg 'topdown' is true or not specified, the triple for a
    directory is generated before the triples for any of its subdirectories
    (directories are generated top down).  If topdown is false, the triple
    for a directory is generated after the triples for all of its
    subdirectories (directories are generated bottom up).

    When topdown is true, the caller can modify the dirnames list in-place
    (e.g., via del or slice assignment), and walk will only recurse into the
    subdirectories whose names remain in dirnames; this can be used to prune the
    search, or to impose a specific order of visiting.  Modifying dirnames when
    topdown is false has no effect on the behavior of os.walk(), since the
    directories in dirnames have already been generated by the time dirnames
    itself is generated. No matter the value of topdown, the list of
    subdirectories is retrieved before the tuples for the directory and its
    subdirectories are generated.

    By default errors from the os.scandir() call are ignored.  If
    optional arg 'onerror' is specified, it should be a function; it
    will be called with one argument, an OSError instance.  It can
    report the error to continue with the walk, or raise the exception
    to abort the walk.  Note that the filename is available as the
    filename attribute of the exception object.

    By default, os.walk does not follow symbolic links to subdirectories on
    systems that support them.  In order to get this functionality, set the
    optional argument 'followlinks' to true.

    Caution:  if you pass a relative pathname for top, don't change the
    current working directory between resumptions of walk.  walk never
    changes the current directory, and assumes that the client doesn't
    either.

    Example:

    import os
    from os.path import join, getsize
    for root, dirs, files in os.walk('python/Lib/email'):
        print(root, "consumes", end="")
        print(sum(getsize(join(root, name)) for name in files), end="")
        print("bytes in", len(files), "non-directory files")
        if 'CVS' in dirs:
            dirs.remove('CVS')  # don't visit CVS directories

    """
    sys.audit("os.walk", top, topdown, onerror, followlinks)
    return _walk(fspath(top), topdown, onerror, followlinks)
File:      c:\users\thinkpad\appdata\local\programs\python\python39\lib\os.py
Type:      function

Signature : 函数签名,与其他函数一样,函数签名是区别两个函数是否是同一个函数的唯一标志(敲黑板面试-可能问到的重点)。包括函数名函数列表
Source: 函数的源代码
该函数的功能是目录(directory)树生成器。
以顶部为根的目录树中的每一个目录(包括本身,但不包括父目录),会生成一个三元组,(dirpath,dirnames,filenames)
dirpath–>string: 一个字符串,目录树的路径。
dirnames–>list: 是dirpath的子目录列表(不包括"."-本身-dirpath, “…” -父目录)
filenames–>list: 非目录文件列表,一般这个为空表示dirpath下全是目录,不包含文件,如果非空表示为根节点,可以确定文件的路径了。
综合起来看就是表示 dirpath目录下包含dirnames目录和filenames文件
因此,遍历每个文件夹中的文件就是: filenames 不为空,即可确定文件的路径为dirpath+filenames[x]
Type: 函数

2. 计算文件的 MD5 值

def fileMD5(filePathAbs):
    md5_tool = hashlib.md5()
    with open(filePathAbs,mode='rb') as fobj:
        while True:
            data = fobj.read(4096)
            if data:
                md5_tool.update(data)
            else:
                break
    return md5_tool.hexdigest()

这里使用hashlib模块的md5函数求文件的md5码,我们先来看看md5函数的说明

In [8]: hashlib.md5??
Signature: hashlib.md5(string=b'', *, usedforsecurity=True)
Docstring: Returns a md5 hash object; optionally initialized with a string
Type:      builtin_function_or_method

Type: 内置函数,表示这个函数一般运行很快。
这里初始化是对string=b’'求md5值,并返回一个hash类型的对象,我们看下其用法

In [15]: t = hashlib.md5()

In [16]: t
Out[16]: <md5 _hashlib.HASH object @ 0x00000205960238F0>

In [17]: dir(t)
Out[17]:
['__class__',
 '__delattr__',
 '__dir__',
 '__doc__',
 '__eq__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__gt__',
 '__hash__',
 '__init__',
 '__init_subclass__',
 '__le__',
 '__lt__',
 '__module__',
 '__ne__',
 '__new__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__subclasshook__',
 'block_size',
 'copy',
 'digest',
 'digest_size',
 'hexdigest',
 'name',
 'update']

In [18]: t.hexdigest()
Out[18]: 'd41d8cd98f00b204e9800998ecf8427e'

In [19]:

我们再看看update方法

In [19]: t.update??
Signature: t.update(obj, /)
Docstring: Update this hash object's state with the provided string.
Type:      builtin_function_or_method

该方法是根据提供的string更新其hash对象的值。

3. 我们组合下两个函数,遍历下某个文件夹下的文件的md5码

import os,hashlib

def getFileName(directory):
    file_list = []
    for dir_name, sub_dir,file_name_list in os.walk(directory):
        #print(dir_name,sub_dir,file_list)
        if file_name_list:
            for file in file_name_list:
                file_path_abs = fr'{dir_name}/{file}'
                file_list.append(file_path_abs)
    return file_list

def fileMD5(filePathAbs):
    md5_tool = hashlib.md5()
    with open(filePathAbs,mode='rb') as fobj:
        while True:
            data = fobj.read(4096)
            if data:
                md5_tool.update(data)
            else:
                break
    return md5_tool.hexdigest()
if __name__ == '__main__':
    file_list = getFileName(r"E:/Project/Support/Day01/北京")
    for file in file_list:
        md5 = fileMD5(file)
        print(file,md5)

目录结构:
在这里插入图片描述
运行结果:


In [23]: run fileManager.py
E:/Project/Support/Day01/北京/a - 副本 (2).txt da5d6d8941b3381fb7565c57db7a9ead
E:/Project/Support/Day01/北京/a - 副本 (3).txt da5d6d8941b3381fb7565c57db7a9ead
E:/Project/Support/Day01/北京/a - 副本 (4).txt da5d6d8941b3381fb7565c57db7a9ead
E:/Project/Support/Day01/北京/a - 副本 (5).txt da5d6d8941b3381fb7565c57db7a9ead
E:/Project/Support/Day01/北京/a - 副本 (6).txt da5d6d8941b3381fb7565c57db7a9ead
E:/Project/Support/Day01/北京/a - 副本.txt da5d6d8941b3381fb7565c57db7a9ead
E:/Project/Support/Day01/北京/a.txt da5d6d8941b3381fb7565c57db7a9ead
E:/Project/Support/Day01/北京/b - 副本 (2) - 副本.txt 84d9cfc2f395ce883a41d7ffc1bbcf4e
E:/Project/Support/Day01/北京/b - 副本 (2).txt 84d9cfc2f395ce883a41d7ffc1bbcf4e
E:/Project/Support/Day01/北京/b - 副本 (3) - 副本.txt 84d9cfc2f395ce883a41d7ffc1bbcf4e
E:/Project/Support/Day01/北京/b - 副本 (3).txt 84d9cfc2f395ce883a41d7ffc1bbcf4e
E:/Project/Support/Day01/北京/b - 副本 - 副本 (2).txt 84d9cfc2f395ce883a41d7ffc1bbcf4e
E:/Project/Support/Day01/北京/b - 副本 - 副本 (3).txt 84d9cfc2f395ce883a41d7ffc1bbcf4e
E:/Project/Support/Day01/北京/b - 副本 - 副本 (4).txt 84d9cfc2f395ce883a41d7ffc1bbcf4e
E:/Project/Support/Day01/北京/b - 副本 - 副本 (5).txt 84d9cfc2f395ce883a41d7ffc1bbcf4e
E:/Project/Support/Day01/北京/b - 副本 - 副本 (6).txt 84d9cfc2f395ce883a41d7ffc1bbcf4e
E:/Project/Support/Day01/北京/b - 副本 - 副本.txt 84d9cfc2f395ce883a41d7ffc1bbcf4e
E:/Project/Support/Day01/北京/b.txt 84d9cfc2f395ce883a41d7ffc1bbcf4e
E:/Project/Support/Day01/北京\昌平/d - 副本 (2).txt d41d8cd98f00b204e9800998ecf8427e
E:/Project/Support/Day01/北京\昌平/d - 副本 (3).txt d41d8cd98f00b204e9800998ecf8427e
E:/Project/Support/Day01/北京\昌平/d - 副本 (4).txt d41d8cd98f00b204e9800998ecf8427e
E:/Project/Support/Day01/北京\昌平/d - 副本 (5).txt d41d8cd98f00b204e9800998ecf8427e
E:/Project/Support/Day01/北京\昌平/d - 副本 (6).txt d41d8cd98f00b204e9800998ecf8427e
E:/Project/Support/Day01/北京\昌平/d - 副本 (7).txt d41d8cd98f00b204e9800998ecf8427e
E:/Project/Support/Day01/北京\昌平/d - 副本 (8).txt d41d8cd98f00b204e9800998ecf8427e
E:/Project/Support/Day01/北京\昌平/d - 副本 (9).txt d41d8cd98f00b204e9800998ecf8427e
E:/Project/Support/Day01/北京\昌平/d - 副本.txt d41d8cd98f00b204e9800998ecf8427e
E:/Project/Support/Day01/北京\昌平/d.txt d41d8cd98f00b204e9800998ecf8427e
E:/Project/Support/Day01/北京\昌平/f - 副本 (2).txt d41d8cd98f00b204e9800998ecf8427e
E:/Project/Support/Day01/北京\昌平/f - 副本 (3).txt d41d8cd98f00b204e9800998ecf8427e
E:/Project/Support/Day01/北京\昌平/f - 副本 (4).txt d41d8cd98f00b204e9800998ecf8427e
E:/Project/Support/Day01/北京\昌平/f - 副本 (5).txt d41d8cd98f00b204e9800998ecf8427e
E:/Project/Support/Day01/北京\昌平/f - 副本 (6).txt d41d8cd98f00b204e9800998ecf8427e
E:/Project/Support/Day01/北京\昌平/f - 副本 (7).txt d41d8cd98f00b204e9800998ecf8427e
E:/Project/Support/Day01/北京\昌平/f - 副本 (8).txt d41d8cd98f00b204e9800998ecf8427e
E:/Project/Support/Day01/北京\昌平/f - 副本 (9).txt d41d8cd98f00b204e9800998ecf8427e
E:/Project/Support/Day01/北京\昌平/f - 副本.txt d41d8cd98f00b204e9800998ecf8427e
E:/Project/Support/Day01/北京\昌平/f.txt d41d8cd98f00b204e9800998ecf8427e
E:/Project/Support/Day01/北京\海淀/c.txt d41d8cd98f00b204e9800998ecf8427e
E:/Project/Support/Day01/北京\海淀/e.txt d41d8cd98f00b204e9800998ecf8427e
In [24]:

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

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

相关文章

CC002:ContextCapture倾斜摄影建模流程

摘要&#xff1a;本文主要介绍cc倾斜摄影建模流程&#xff0c;包括工程创建、影像添加、任务序列路径指定、空三、像控点的导入与刺点、空三优化、三维重建、定义生产三维产品的格式等流程&#xff0c;其中实验数据来源为多普云职业教育平台。 一、实验数据获取 本实验使用cc软…

【深度学习】吴恩达课程笔记(三)——参数VS超参数、深度学习的实践层面

笔记为自我总结整理的学习笔记&#xff0c;若有错误欢迎指出哟~ 吴恩达课程笔记——参数VS超参数、深度学习的实践层面 六、参数VS超参数1.参数和超参数的区别2.什么是超参数&#xff1f;3.如何寻找超参数的最优值&#xff1f; 七、深度学习的实践层面1.训练 / 验证 / 测试集(T…

python 应用 之 转图片格式webp

需求&#xff1a;将图片转成webp格式 目录 一、python 图片转webp格式 1、安装python 2、webp 依赖的包 1&#xff09;、PIP 安装Pillow 2)、VSCODE 选择python版本 2.1&#xff09;、测试是否安装成功 2.2&#xff09;、vscode选择python版本 3、python程序 1&#…

【深度学习】吴恩达课程笔记(二)——浅层神经网络、深层神经网络

笔记为自我总结整理的学习笔记&#xff0c;若有错误欢迎指出哟~ 笔记链接 【深度学习】吴恩达课程笔记(一)——深度学习概论、神经网络基础 吴恩达课程笔记——浅层神经网络、深层神经网络 四、浅层神经网络1.双层神经网络表示2.双层神经网络的前向传播第一层前向传播第二层前…

数据库简史:多主数据库架构的由来和华为参天引擎的机遇

注&#xff1a;本文发表后&#xff0c;收到了很多后台反馈&#xff0c;其中关于大型机的早期成就不容省略。微调重发本文&#xff0c;纯属个人观点&#xff0c;错谬之处&#xff0c;仍然期待指正。 2023年10月13日&#xff0c;在北京举办的“2023金融业数据库技术大会"上&…

前端 :用HTML和css制作一个小米官网的静态页面

1.HTML&#xff1a; <body><div id "content"><div id "box"><div id "top"><div id "top-left"><span id "logo">MI</span><span id "text-logo">小米账…

Java之数据类型与变量

目录 1. 字面常量 2. 数据类型 3. 变量 3.1 变量概念 3.2 语法格式 3.3 整型变量 3.3.1 整型变量 3.3.2 长整型变量 3.3.3 短整型变量 3.3.4 字节型变量 3.4 浮点型变量 3.4.1 双精度浮点型 3.4.2 单精度浮点型 3.5 字符型变量 3.6 布尔型变量 3.7 类型转换 3.7…

Kafka集群修改单个Topic数据保存周期

在大数据部门经常使用Kafka集群&#xff0c;有的时候大数据部门可能在Kafka中的Topic数据保存时间不需要很长&#xff0c;一旦被消费后就不需要一直保留。默认Topic存储时间为7day&#xff0c;个别的Topic或者某台Kafka集群需要修改Topic数据保存的一个周期&#xff0c;调整为3…

攻克组合优化问题!美国DARPA选中全栈量子经典计算公司Rigetti

&#xff08;图片来源&#xff1a;网络&#xff09; 近日&#xff0c;美国量子计算公司Rigetti宣布&#xff0c;它被美国国防高级研究计划局 (DARPA) 选中&#xff0c;加入想象未来量子实际应用 (IMPAQT) 计划&#xff0c;推进先进量子算法的研发&#xff0c;去解决组合优化问…

课题学习(九)----阅读《导向钻井工具姿态动态测量的自适应滤波方法》论文笔记

一、 引言 引言直接从原论文复制&#xff0c;大概看一下论文的关键点&#xff1a; 垂直导向钻井工具在近钻头振动和工具旋转的钻井工作状态下&#xff0c;工具姿态参数的动态测量精度不高。为此&#xff0c;通过理论分析和数值仿真&#xff0c;提出了转速补偿的算法以消除工具旋…

前端 : 用html ,css,js写一个你画我猜的游戏

1.HTML&#xff1a; <body><div id "content"><div id "box1">计时器</div><div id"box"><div id "top"><div id "box-top-left">第几题:</div><div id "box…

ROS自学笔记十八:ModuleNotFoundError: No module named ‘serial‘

出现上述错误&#xff0c;则需要安装serial功能包 第一步&#xff1a;输入 sudo apt install python3-pip 第二步&#xff1a;输入 pip install pyserial

C++打怪升级(九)- STL之string

~~~~ 前言1. STL简单介绍1.1 什么是STL?1.2 STL的版本最初的版本P.J版本RW版本SGI版本 1.3 STL的六大组件1.4 STL的一些缺点1.5 STL重要吗&#xff1f; 2 编码2.1 ASCII编码2.2 Unicode编码UTF-8编码 2.3 GBK编码 3. 类模板basic_string4. 单字符string类4.1 什么是string4.2 …

LV.12 D12 GPIO实验 学习笔记

一、GPIO简介 GPIO&#xff08;General-purpose input/output&#xff09;即通用型输入输出&#xff0c;GPIO可以控制连接在其之上的引脚实现信号的输入和输出 芯片的引脚与外部设备相连&#xff0c;从而实现与外部硬件设备的通讯、控制及信号采集等功能 实验步骤 1. 通过…

C/C++晶晶赴约会 2020年12月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C晶晶赴约会 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C晶晶赴约会 2020年12月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 晶晶的朋友贝贝约晶晶下周一起去看展览&#xff0…

x210项目重新回顾之十七升级到linux4.19.114 +buildroot2018再讨论

代码参考https://github.com/colourfate/x210_bsp/ 他的是linux_4.10(dtb为 s5pv210-x210..dtb)我打算用linux4.19.114(dtb为 s5pv210-smdkv210.dtb) &#xff0c;所以修改build.sh ------------------------------------------------------------------------------ 5 M…

Flutter笔记:完全基于Flutter绘图技术绘制一个精美的Dash图标(下)

Flutter笔记 完全基于Flutter绘图技术绘制一个精美的Dart吉祥物Dash 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/arti…

NewStarCTF2023week4-溯源

题目描述是冰蝎进行WebShell连接的流量包&#xff0c;我们需要找到攻击者获取到的服务器用户名和服务器内网IP地址。 先介绍一下常见webshell工具的流量特征&#xff1a; 1、中国菜刀 请求体中存在eval、base64等特征字符&#xff1b; 连接过程中使用base64编码对发送的指令…

QT5.15在Ubuntu22.04上编译流程

在我们日常遇到的很多第三方软件中&#xff0c;有部分软件针对开发人员&#xff0c;并不提供预编译成果物&#xff0c;而是需要开发人员自行编译&#xff0c;此类问题有时候不是问题&#xff08;编译步骤的doc详细且清晰时&#xff09;&#xff0c;但有时候又很棘手&#xff08…

项目管理之如何分解项目工作

在项目管理中&#xff0c;产品分解结构&#xff08;PBS&#xff09;是一种重要的工具&#xff0c;可以帮助团队更好地理解和组织项目中的产品。通过产品分解结构&#xff0c;团队可以将产品的需求、功能、规格等分解成不同的层次和组成部分&#xff0c;以便更好地进行任务分配、…