Python----Python高级(文件操作open,os模块对于文件操作,shutil模块 )

一、文件处理

1.1、文件操作的重要性和应用场景 

1.1.1、重要性 

数据持久化:

        文件是存储数据的一种非常基本且重要的方式。通过文件,我们可 以将程序运行时产生的数据永久保存下来,以便将来使用。

跨平台兼容性:

        文件是一种通用的数据交换格式,可以在不同的操作系统和平台 上进行传输和处理。

数据备份与恢复:

        定期备份数据到文件有助于防止数据丢失,便于数据恢复。

数据共享:

        文件可以轻松地在网络之间共享,使得多人协作成为可能。

配置管理:

        许多应用程序使用文件来存储配置信息,方便用户根据需要调整设 置。

日志记录:

        文件被广泛用于记录程序运行时的日志,这对于调试和性能监控非常 重要。

1.1.2、应用场景 

数据分析:

        读取数据文件进行数据分析,或者程序的运行结果输出到文件,以便 于报告或进一步分析。

Web开发:

        读取配置文件来设置Web服务器的各种参数,处理用户上传的文件。

系统管理:

        读取和写入日志文件以监控系统状态。

文本处理:

        读取文本文件,进行搜索、替换等操作,并将处理后的结果保存到文 件中。

游戏开发:

        读取账号数据、保存账号数据,管理游戏资源文件。

1.2、文件

        文件是一个存储在某种持久性存储介质(如硬盘、固态驱动器或磁带等)上的数据集 合。文件可以包含各种类型的信息,包括文本、图像、音频、视频、应用程序代码以 及其他类型的二进制数据。文件是操作系统用来组织和管理这些数据的主要方式之 一。

1.2.1、文件组成 

数据:

        文件中存储的实际信息,即用户想要保存的具体信息,如文本、图像或代 码等。

元数据:

        关于文件本身的附加信息,包括但不限于文件名、创建日期、文件大 小、文件类型等。

文件系统:

        这是操作系统用来组织和管理文件的一种逻辑结构,包括文件的命 名、存储和检索方式。文件系统还负责管理磁盘空间的分配,并确保文件可以被 正确地读写。常见的文件系统有 FAT32、NTFS 等。

1.2.2、文件的属性 

文件名:

        用于标识文件的唯一名称,通常包含主文件名和扩展名(如 document.txt)。

位置:

        文件存储在一个特定的位置,这个位置可以用目录或路径来表示。例如, 在Windows系统中,文件路径可能是 C:\Documents\example.txt;而在Unix like系统中,路径可能是 /home/user/Documents/example.txt。

文件类型:

        根据文件的内容和用途,文件可以有多种类型,如文本文件、图像文 件、音频文件等。

文件大小:

        文件占用的存储空间大小,通常以字节(B)、千字节(KB)、兆字 节(MB)或吉字节(GB)为单位。

创建日期和时间:

        文件被创建的时间戳。

修改日期和时间:

        文件最后一次被修改的时间戳。

访问权限:

        定义了不同用户对文件的读、写、执行权限。

1.2.3、文件的类型 

在Windows系统中,大致可以分为以下几种:

文本文件:

        包含可读字符的文件,如.txt、.csv、.html等。 

二进制文件:

        包含不可直接读的原始二进制数据的文件,如.exe、.jpg、.mp3 等。

可执行文件:

        可以被操作系统执行的文件,如.exe(Windows)。

数据文件:

        用于存储应用程序数据的文件,如数据库文件、配置文件等。

目录/文件夹:

        用于组织和管理其他文件的特殊文件。

在Linux系统中,可以分为以下几种:

-: 普通文件,比如txt、py等。

d:目录文件,比如xx目录,类比Windows中的文件夹。

b:块设备文件,Linux系统中的底层驱动文件。 

c:字符设备文件,Linux系统中的底层驱动文件。

l: 链接文件,类似于快捷方式

p:管道文件,用于进程间的通信。

s:套接字文件,用于网络通信的端点,用于网络传输。

1.3、文件的路径

        在计算机文件系统中,路径是用来标识文件或目录位置的一种方式。路径有两种主要 的形式:绝对路径和相对路径。这两种路径形式对于在文件系统中导航和访问文件非 常重要。

1.3.1、绝对路径

        绝对路径是从文件系统的根目录开始的一条完整路径,它指明了从根目录到达目标文 件或目录的具体步骤。

特点:

        不依赖于当前工作目录。

        在不同用户或程序间具有一致性。

        提供了文件或目录的完整位置信息。 

示例:

        在Windows系统中,一个绝对路径可能看起来像这样:                 C:\Users\John\Documents\report.txt

        在Linux/Unix系统中,一个绝对路径可能看起来像这 样:                 /home/john/Documents/report.txt

1.3.2、相对路径

相对路径是指相对于某个起始点(通常是当前工作目录)到达目标文件或目录的路 径。

特点:

        取决于当前工作目录的位置。

        更加灵活,但可能会因上下文变化而变化。

        适用于在同一目录层级或附近层级内的文件访问。 

示例:

        在Windows系统中,如果当前工作目录是 C:\Users\John\Documents,那么我 想去找同目录下的example.txt的话,就是.\example.txt,如果上级目录下的 example.txt的话,就是..\example.txt。

        在Linux/Unix中,如果当前工作目录是 /home/john/Documents,那么我想去找 同目录下的example.txt的话,就是./example.txt,如果上级目录下的 example.txt的话,就是../example.txt。 

1.3.3、路径中的特殊符号

. (当前目录):表示当前目录。

.. (上一级目录):表示当前目录的父目录。 

1.3.4、 使用场景

绝对路径:

        当需要指定确切位置,或者在不同环境(如不同用户的系统)下保持 一致时使用。

相对路径:

        当文件位于同一目录或相关联的子目录中时使用,可以使程序更加灵 活和便携。

1.4、文件系统

        文件系统是一种逻辑结构,它定义了如何在物理存储设备(如硬盘驱动器、固态硬盘 等)上组织和管理文件。文件系统负责跟踪文件的位置、大小、元数据(如创建时 间、修改时间等),并提供创建、读取、更新和删除文件的接口,方便操作系统或用 户进行文件的操作。

主要功能:

1. 命名:为文件和目录提供唯一的名称。

2. 存储:管理文件在存储设备上的物理位置。

3. 检索:允许用户通过文件名或其他属性查找文件。

4. 更新:支持文件的创建、修改和删除。

5. 权限管理:控制用户和组对文件和目录的访问权限。

6. 磁盘空间管理:跟踪可用和已用磁盘空间,并在必要时进行空间分配和回收。

7. 错误恢复:在发生错误(如系统崩溃或电源故障)时,尝试恢复文件系统的完整 性。

常见的文件系统类型:

FAT (File Allocation Table):主要用于较旧的系统或移动存储设备。

NTFS (New Technology File System):Windows 操作系统的默认文件系统。

HFS+ (Hierarchical File System Plus):以前是 macOS 的默认文件系统。

APFS (Apple File System):macOS 和 iOS 设备的新一代文件系统。

ext4 (Fourth Extended File System):Linux 操作系统的常用文件系统。

XFS (XFS File System):另一种用于 Linux 的文件系统。

1.5、文件操作 

1.5.1、打开文件

使用open()函数来打开文件,这个函数返回一个文件对象,可以用来 进行后续的读写等操作。

res = open(file_name, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)

file_name:

        要打开的文件的路径加名称(包含后缀名),可以是绝对路径也可 以是相对路径。

mode:

        打开文件的模式,默认为‘r',表示只读模式且以文本模式读取。

buffering:

        可选参数,缓冲区大小。0表示无缓冲,1表示行缓冲,更大的整数 表示具体的缓冲区大小。默认为None,表示默认的缓冲策略,大多数情况下, 使用默认值就可以了。

encoding:

        可选参数,用于指定文件的编码,仅适用于文本模式,默认值None 表示使用系统的默认编码来打开文本文件。

errors:

        可选参数,用于指定如何处理编码和解码错误,对于二进制模式无效。 常见的值有strict、ignore、replace等。

newline:

        可选参数,用于控制通用换行符模式的行为。它可以是 None、''、 启用,\n、\r和 '\n'、 '\r'或 '\r\n'。如果设置为 None,则通用换行符模式被 \r\n都被识别为换行符,并以\n的形式在文本模式下读取。 如果设置为其他值,则在该值处进行换行符的转换。

closefd:

        可选参数,如果为 True(默认值),则在文件关闭时关闭文件描述 符。如果为 False,则文件描述符在文件关闭时保持打开状态。

open.txt

open('./open.txt')
# <_io.TextIOWrapper name='./open.txt' mode='r' encoding='utf-8'>

1.5.2、文件模式

'r':read 只读模式(默认值)。如果文件不存在就会触发异常。

'r+':打开文件进行读写,该文件必须存在。

'w':write 写入模式,如果文件存在则覆盖,不存在则创建。

'w+':打开文件进行读写,如果文件存在则覆盖,如果不存在则创建。

'a':追加模式,如果文件存在则在文件末尾追加内容,不存在则创建。

'a+':打开文件进行读写,如果文件存在则在末尾追加,如果不存在则创建。

'x':独占创建模式,如果文件已存在则抛出异常,这可以用来避免覆盖现有文 件。

'b':二进制模式,读写时,数据不会被转换,直接以字节形式处理。

't':文本模式(默认值),读写时,数据会被视为字符串。

1.5.3、读取文件

read(size):size是可选参数,在文本模式下,一次最多读取文件指针后面size 个大小的字符,在二进制模式下,一次最多读取文件指针后面size个大小的字 节,默认size为None,表示一次性读取文件指针后面的所有内容并将其作为字符 串返回。

readline():从文件中读取单行数据。

readlines():读取所有行,并返回一个列表。

path='./open.txt'
file=open(path)
print(file.read())
'''
111111111111111111111111111111111111111
222222222222222222222222222222222222222
333333333333333333333333333333333333333
444444444444444444444444444444444444444
'''
path='./open.txt'
file=open(path)
print(file.readline())
'''
111111111111111111111111111111111111111
'''
path='./open.txt'
file=open(path)
print(file.readlines())
# ['111111111111111111111111111111111111111\n', '222222222222222222222222222222222222222\n', '333333333333333333333333333333333333333\n', '444444444444444444444444444444444444444']

1.5.4、写入文件

write(str):将str的内容覆盖到当前文件指针位置的后面,并将文件指针移动 到新的写入位置。会返回写入的字符数量,写入其他类型的对象时,要先将它们 转化为字符串或字节对象。

writelines():写入一个字符串列表。

path='./open.txt'
file=open(path,'r+')
file.write('aaaaaaaaaaaaaaaaaa')
file.close()
'''
aaaaaaaaaaaaaaaaaa111111111111111111111
222222222222222222222222222222222222222
333333333333333333333333333333333333333
444444444444444444444444444444444444444
'''
path='./open.txt'
file=open(path,'r+')
file.writelines(['aaaaaaaaaaaaaaaaaa','bbbbbbbbbbbbbbbbbb'])
file.close()
'''
aaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbb111
222222222222222222222222222222222222222
333333333333333333333333333333333333333
444444444444444444444444444444444444444
'''

1.5.5、关闭文件

使用close()方法关闭文件。关闭文件是一个重要的操作,因为它释放 了与文件对象关联的系统资源,并确保数据正确地写入存储介质。

功能:

释放资源:关闭文件,释放与文件对象关联的所有系统资源,如文件描述符、缓 冲区等。

刷新缓冲区:在关闭文件之前,它会自动刷新文件的内部缓冲区,确保所有缓冲 的数据都被写入磁盘。

禁止进一步操作:关闭文件后,文件对象不再允许进行读取、写入或其他操作。 

重要性:

资源管理:文件描述符是有限的资源,如果不关闭文件,可能会导致资源泄漏, 特别是在打开大量文件时。

数据完整性:确保所有缓冲的数据都写入磁盘,防止数据丢失。尤其是在写入操 作后,如果不关闭文件,可能会导致最后写入的数据没有保存。

防止错误:关闭文件可以防止对已关闭文件的非法操作,这些操作可能会引发异 常。

提高效率:关闭不再需要的文件可以释放系统资源,提高程序的整体效率。

清理操作:在关闭文件时,可以执行一些清理操作,如关闭网络连接或释放其他 相关资源。 

path='./open.txt'
file=open(path,'r+')
file.close()

1.5.6、with语句

with语句是一种上下文管理器(context manager),用于简化资源 的打开和关闭过程,确保资源在不需要时得到适当的释放。这种机制常用于文件操 作、网络连接、锁等资源的处理,可以避免资源泄露和出现其他资源管理问题。

with expression [as variable]:

        with-block 

表达式(expression):这个表达式必须返回一个实现了上下文管理器协议的对 象,也就是说,它需要包含 __enter__和 __exit__两个方法。

as子句:这是可选的。如果提供了as子句,那么 expression中 法的返回值将被赋值给变量。

with-block:这个代码块是 __enter__方 with语句的主体,在执行这个代码块之前,会首先 调用上下文管理器的 __enter__方法。当 with-block执行完毕后,不论是因为 正常完成还是因为异常,都会调用上下文管理器的 __exit__方法,该方法负责 关闭文件。 

执行流程为: 

执行表达式:首先执行 调用 expression,返回一个上下文管理器对象。

__enter__() 方法:上下文管理器对象的 __enter__() 方法被调用,该 方法通常用于执行一些初始化操作,如打开文件。

执行语句块:语句块中的语句按照顺序执行。

调用 __exit__() 方法:当语句块执行完毕后,上下文管理器对象的 __exit__() 方法被调用,该方法通常用于执行清理操作,如关闭文件或释放数 据库会话。

使用 with 语句的好处 :

自动资源管理:

        不需要手动调用

更好的错误处理:

        close 方法,代码更简洁。 __exit__() 方法可以包含异常处理代码,确保在发生异常时 资源得到妥善处理。

更好的代码组织:

        with 语句有助于将相关的操作组织在一起,使代码更加清 晰。

with open(r"open.txt","w+") as f:
    f.writelines('大家好')
# 大家好

1.6、文件指针的操作 

1.6.1、获取文件指针的位置

tell()

tell()函数没有参数,它的功能就是返回文件指针当前位置相对于文件开头的偏移量。 这个偏移量是一个整数,表示从文件开头到当前读取位置的字节数。

注意事项 :

        tell 方法仅在文件被打开用于读取时才有意义,因为在写入模式下,文件指针 的位置会随着写入操作而改变。

        在读取模式下, tell 方法返回的是当前读取位置相对于文件开头的偏移量。

        其返回值是字节数,不是字符数,对于utf-8的编码格式来说,一个汉字占三个字 节,所以读取中文时,字符数与字节数是不一样的。 

with open(r"open.txt","r") as f:
    print(f.tell())
# 0

1.6.2、改变文件指针的位置

seek()

seek(offset, whence=0)

offset:

        表示相对于whence的偏移量,是一个整数。这个偏移量可以是正数,也可 以是负数。正数表示向文件末尾方向移动,负数表示向文件开头方向移动,0则表示 不偏移。

whence:

        是一个可选的参数,默认为0。它指定了offset的起始位置,可以是以下 三个值之一:                 0:表示从文件开头开始计算偏移量(默认值)。

                1:表示从当前文件指针位置开始计算偏移量。

                2:表示从文件末尾开始计算偏移量。 

注意事项:

        seek 方法在文本模式和二进制模式下都有效,但文本模式whence只能使用默认 值,不能自己修改。

        seek 方法基于字节偏移量。这意味着即使文件包含多字节字符, 仍然是字节偏移量。 

with open(r"open.txt","r") as f:
    print(f.tell())#0
    f.seek(5)
    print(f.tell())#5

二、os模块对于文件操作

2.1、调用操作系统命令

os.system()调用windows系统的记事本程序

import os
os.system("notepad.exe")

os.system()调用windows系统中ping命令 

import os
os.system("ping www.baidu.com")

 os.startfile()直接调用可执行文件 

import os
os.startfile('C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe')

2.2、获取文件大小

os.path.getsize(path)

        path (字符串) - 文件的路径。

        返回一个整数,表示文件的大小(以字节为单位)。如果文件不存在或无法访问,会 抛出异常。

import os
path='./open.txt'
print(os.path.getsize(path))#73

2.3、获取文件的最后修改时间

os.path.getmtime(path)

        path (字符串) - 文件的路径

        返回一个浮点数,表示文件的最后修改时间,自纪元(1970年1月1日 00:00:00 UTC)以来的秒数,可以搭配time模块进行格式化。如果文件不存在或无法访问,会 抛出异常。

import os
path='./open.txt'
print(os.path.getmtime(path))#1737371817.6055775

2.4、获取文件的创建时间

os.path.getctime(path)

        path (字符串) - 文件的路径。

        返回一个浮点数,表示文件的最后修改时间,自纪元(1970年1月1日 00:00:00 UTC)以来的秒数,可以搭配time模块进行格式化。如果文件不存在或无法访问,会 抛出异常。

import os
path='./open.txt'
print(os.path.getctime(path))#1737340129.5444336

2.5、获取文件的最后访问时间

os.path.getatime(path)

        path (字符串) - 文件的路径

        返回一个浮点数,表示文件的最后修改时间,自纪元(1970年1月1日 00:00:00 UTC)以来的秒数,可以搭配time模块进行格式化。如果文件不存在或无法访问,会 抛出异常。

import os
path='./open.txt'
print(os.path.getatime(path))#1737371872.8743682

2.6、创建目录

os.mkdir(path, mode=0o777)

        path (字符串) - 要创建的目录的路径。

        mode (整型,可选) - 设置新创建目录的权限位。默认值是 0o777(八进制表 示),意味着所有人都有读、写和执行权限,只针对Linux系统,Windows系统 会忽略。

如果目录创建成功,则函数不返回任何内容。如果指定的路径已经存在就会抛出异 常,如果路径是无效的,或者由于权限不足等原因无法创建目录,也会抛出异常。 

注意事项

        os.mkdir 只能创建一级目录,如果父目录不存在,则会抛出异常。

        如果需要创建多级目录结构,可以使用 需的中间目录。 

import os
os.mkdir('./hhhh')

2.7、删除目录

os.rmdir(path)

        path (字符串) - 要删除的空目录的路径。

        如果目录删除成功,则函数不返回任何内容。如果指定的路径不存在,则会抛出异 常,如果路径不是一个空目录,或者由于权限不足等原因无法删除目录,也会抛出此 异常。

注意事项

        os.rmdir只能删除空目录。如果目录中包含文件或其他目录, 将无法删除它,并且会抛出异常。

import os
os.rmdir('./hhhh')

2.8、改变当前工作目录

os.chdir(path)

        path (字符串) - 要切换到的目录的路径。如果指定的路径不存在、指定的路径不 是一个目录、没有权限更改到指定的目录就会抛出异常。

        如果目录切换成功,则函数不返回任何内容。

import os
print(os.getcwd())#d:\project
os.chdir('./aaaaaaaaaaaa')
print(os.getcwd())#d:\project\aaaaaaaaaaaa

2.9、获取当前工作目录

os.getcwd()

        该函数没有参数,但会返回一个字符串,表示当前工作目录的路径。

注意事项

        os.getcwd() 返回的是字符串形式的路径。

        在不同的操作系统中,路径的表示方式可能不同。例如,在 Windows 中路径通 常使用反斜杠 \,而在 Unix/Linux 系统中使用正斜杠 /。 

常用于:

        当需要在脚本中确定当前的工作位置时。

        在进行文件操作之前,需要知道文件的相对路径是基于哪个目录。

        当需要在不同目录之间切换时,但之后想要回到原始目录。 

import os
print(os.getcwd())#d:\project

2.10、列出目录下的所有内容

os.listdir(path)

        path (字符串) - 要列出内容的目录的路径。如果省略,默认为当前工作目录。如 果指定的路径不存在、指定的路径不是一个目录、没有权限读取指定的目录就会 抛出异常。

        返回一个列表,其中包含指定路径下的所有文件和子目录的名称。

注意事项:

        os.listdir 不会递归地列出子目录中的内容。它只列出直接位于指定目录下的 文件和子目录。

        返回的列表中只包含名称,不包含路径。如果需要完整路径,你需要将目录名称 与路径结合起来。

        如果目录为空,返回的列表将是空的。

        在使用 os.listdir 时,应该考虑到可能出现的异常,并适当处理它们,以确保 代码的健壮性。 

import os
print(os.listdir())#['hhh']

2.11、重命名目录

os.rename(src, dst)

        src (字符串) - 要重命名的文件或目录的当前路径。

        dst (字符串) - 文件或目录的新名称和路径。

        如果重命名成功,则函数不返回任何内容。

import os
path='./open.txt'
os.rename(path,'./openwith.txt')

2.12、检查路径是否为目录

os.path.isfile(path)

        path (字符串) - 要检查的路径      

        如果指定的路径是一个目录,返回 True;否则返回  False

注意事项:

        os.path.isdir 不会抛出异常。如果指定的路径不存在,它会返回 不是抛出异常。

        如果路径存在但不是目录, os.path.isdir 也会返回False

        路径可以是绝对路径,也可以是相对路径。

import os
path='./openwith.txt'
os.path.isdir(path)#False

2.13、检查路径是否为文件

os.path.isfile(path)

        path (字符串) - 要检查的路径      

        如果指定的路径是一个文件,返回 True;否则返回  False

主要用途:

        在处理文件之前,确认指定的路径确实是一个文件,这样可以避免对目录执行文 件操作。

        在脚本中执行条件逻辑时,根据路径是否为文件来决定下一步操作。

        在文件处理脚本中,区分文件和目录,以便进行适当的操作。

import os
path='./openwith.txt'
os.path.isfile(path)#True

2.14、路径拼接

os.path.join(path, *paths)

        path (字符串) - 起始路径,通常是一个目录路径。

        *paths (可变参数) - 需要连接到 path 的其他路径片段。

        返回一个字符串,表示将所有路径片段连接后的完整路径。

os.path.join()的作用:

        合并路径:

                将多个路径组件合并成一个单一的路径字符串。

        处理分隔符:

                它会根据操作系统自动添加或删除路径分隔符(例如,在 Windows 上是反斜杠 \,在 Unix/Linux 上是正斜杠 /)。

        消除冗余分隔符:

                如果路径组件之间有多余的分隔符,os.path.join() 会自动处 理,避免产生错误的路径。 

import os  

base_path = '/user/files'  
file_name = 'document.txt'  
full_path = os.path.join(base_path, file_name)  

print(full_path)  # /user/files/document.txt

2.15、路径拆分

head, tail = os.path.split(path)

        path: 表示要分割的路径。

        head: 它是 path 的目录路径

        tail: 它是 path 的文件名

主要用途:

        从完整路径中提取文件名或目录名。

        用于文件处理时,需要单独操作文件名和路径的其他部分。

        在遍历文件系统时,帮助确定每个文件的上级目录。 

import os  


full_path = '/user/files/document.txt'  
path, file_name = os.path.split(full_path)  

print(path)      # /user/files  
print(file_name) # document.txt

2.16、获取绝对路径

os.path.abspath(path)

        path (字符串) - 要转换为绝对路径的相对路径或文件路径

        返回一个字符串,表示转换后的绝对路径。        

主要用途:

        在脚本中确保使用的是文件的绝对路径,这样即使当前工作目录改变,脚本也能 正确地定位文件。

        将相对路径转换为绝对路径,以便在不同的环境中更可靠地引用文件或目录。

        在需要输出或记录文件的完整位置时使用

import os  

relative_path = 'openwith.txt'  
absolute_path = os.path.abspath(relative_path)  

print(absolute_path)  #d:\project\openwith.txt

2.17、检查路径是否存在

os.path.exists(path)

        path: 表示要检查的路径。

        path_exists: 返回一个布尔值,如果路径存在则返回 则返回 False。

主要用途: 

        在执行文件操作之前,确认文件或目录是否存在,以避免引发不必要的错误。

        在脚本中执行条件逻辑时,根据文件或目录的存在与否来决定下一步操作。

        在文件备份、清理或其他自动化任务中,检查特定文件或目录是否应该被处理。

import os  

path_to_check = './openwith.txt'  
exists = os.path.exists(path_to_check)  

print(exists)  # True

 2.18、遍历所有文件和目录

        os.walk() 方法是一个简单易用的文件、目录遍历器,可以帮助我们高效的处理文件、目录方面的事情。

格式如下:
        os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])
其中,top:是要遍历的目录。topdown:可选,True,先遍历top目录再遍历子目录。
返回三元组(root、dirs、files):
        root:当前正在遍历的文件夹本身
        dirs:一个列表,该文件夹中所有的目录的名字
        files:一个列表,该文件夹中所有的文件的名字

import os

path = os.getcwd()
list_files = os.walk(path,topdown=False)

for root,dirs,files in list_files:
  for name in files:
    print(os.path.join(root,name))
  for name in dirs:
    print(os.path.join(root,name))


'''
d:\project\.idea\inspectionProfiles\profiles_settings.xml
d:\project\.idea\.gitignore
d:\project\.idea\project.iml
d:\project\.idea\misc.xml
d:\project\.idea\modules.xml
d:\project\.idea\workspace.xml
d:\project\.idea\inspectionProfiles
d:\project\__pycache__\string_utils.cpython-312.pyc
d:\project\.idea
d:\project\__pycache__
'''

2.19、递归遍历目录下所有文件 

import os
allfile=[]

def getFiles(path,level):
  childFiles = os.listdir(path)
  for file in childFiles:
    filepath = os.path.join(path,file)
    if os.path.isdir(filepath):
      getFiles(filepath,level+1)
    allfile.append("\t"*level+filepath)


getFiles(os.getcwd(),0)

for f in reversed(allfile):
  print(f)

三、shutil模块 

 shutil模块是python标准库中提供的,主要用来做文件和文件夹的拷贝、移动、删除等;还可以做文件和文件夹的压缩、解压缩操作。

os模块提供了对目录或文件的一般操作。shutil模块作为补充,提供了移动、复制、压缩、解压等操作,这些os模块都没有提供。

文件的拷贝 

import shutil


shutil.copyfile("a.txt","a_copy.txt")

递归的拷贝文件夹内容

import shutil

#"音乐"文件夹不存在才能用

shutil.copytree("电影/学习","音乐",ignore=shutil.ignore_patterns("*.html","*.htm"))

将文件夹所有内容压缩

import shutil
import zipfile
#将"电影/学习"文件夹下所有内容压缩到"音乐2"文件夹下生成movie.zip
shutil.make_archive("音乐2/movie","zip","电影/学习")


#压缩:将指定的多个文件压缩到一个zip文件
z = zipfile.ZipFile("a.zip","w")
z.write("1.txt")
z.write("2.txt")
z.close()

将压缩包解压缩到指定文件夹

import shutil
import zipfile
#解压缩:
z2 = zipfile.ZipFile("a.zip","r")
z2.extractall("d:/") #设置解压的地址
z2.close()

四、思维导图 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[MCAL]Mcu配置

PostBuild: PreCompile: 选择时钟来源&#xff1b; 选择初始McuInitClock() 函数 电路手册里有晶振频率&#xff0c;如上所示&#xff1b;

(k8s)k8s部署mysql与redis(无坑版)

0.准备工作 在开始之前&#xff0c;要确保我们的节点已经加入网络并且已经准备好&#xff0c;如果没有可以去看我前面发表的踩坑与解决的文章&#xff0c;希望能够帮到你。 1.k8s部署redis 1.1目标 由于我们的服务器资源较小&#xff0c;所以决定只部署一个redis副本&#x…

Python新春烟花

目录 系列文章 写在前面 技术需求 完整代码 下载代码 代码分析 1. 程序初始化与显示设置 2. 烟花类 (Firework) 3. 粒子类 (Particle) 4. 痕迹类 (Trail) 5. 烟花更新与显示 6. 主函数 (fire) 7. 游戏循环 8. 总结 注意事项 写在后面 系列文章 序号直达链接爱…

机器学习09-Pytorch功能拆解

机器学习09-Pytorch功能拆解 我个人是Java程序员&#xff0c;关于Python代码的使用过程中的相关代码事项&#xff0c;在此进行记录 文章目录 机器学习09-Pytorch功能拆解1-核心逻辑脉络2-个人备注3-Pytorch软件包拆解1-Python有参和无参构造构造方法的基本语法示例解释注意事项…

AI在SEO中的关键词优化策略探讨

内容概要 在当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;正逐渐重塑搜索引擎优化&#xff08;SEO&#xff09;行业。AI技术的快速发展使得SEO策略发生了翻天覆地的变化&#xff0c;特别是在关键词优化方面。关键词优化的基本概念是通过选择与用户搜索意图密…

探索与创作:2024年我在CSDN平台上的成长与突破

文章目录 我与CSDN的初次邂逅初学阶段的阅读CSDN&#xff1a;编程新手的避风港初学者的福音&#xff1a;细致入微的知识讲解考试复习神器&#xff1a;技术总结的“救命指南”曾经的自己&#xff1a;为何迟迟不迈出写博客的第一步兴趣萌芽&#xff1a;从“读”到“想写”的初体验…

element el-table合并单元格

合并 表格el-table添加方法:span-method"” <el-table v-loading"listLoading" :data"SHlist" ref"tableList" element-loading-text"Loading" border fit highlight-current-row :header-cell-style"headClass" …

行业热点丨低空飞行eVTOL的关键技术与发展趋势

本篇主要围绕eVTOL仿真难点和趋势&#xff0c;eVTOL仿真多学科解决方案和当下热门的AI或者机器学习的方法在EVTOL中的应用展开。 eVTOL 研发难点 首先是eVTOL研发难点&#xff0c;区别于上个世纪70年代就已经构型稳定或者技术方法稳定的民航客机&#xff0c;eVTOL到今天尚未有经…

BOBO小火炬全套源码XE修复版2025(火炬天花板二次开发版)

《小火炬全套源码 传奇游戏源码讲解》 小火炬全套源码是一种用于开发经典传奇类游戏的源码包。传奇游戏作为一款经典的多人在线角色扮演游戏&#xff08;MMORPG&#xff09;&#xff0c;有着庞大的用户基础和强大的游戏生态。小火炬全套源码主要提供了从基础架构到核心功能的完…

Flutter:搜索页,搜索bar封装

view 使用内置的Chip简化布局 import package:chenyanzhenxuan/common/index.dart; import package:ducafe_ui_core/ducafe_ui_core.dart; import package:flutter/material.dart; import package:get/get.dart; import package:tdesign_flutter/tdesign_flutter.dart;import i…

网络通信---MCU移植LWIP

使用的MCU型号为STM32F429IGT6&#xff0c;PHY为LAN7820A 目标是通过MCU的ETH给LWIP提供输入输出从而实现基本的Ping应答 OK废话不多说我们直接开始 下载源码 LWIP包源码&#xff1a;lwip源码 -在这里下载 ST官方支持的ETH包&#xff1a;ST-ETH支持包 这里下载 创建工程 …

麒麟操作系统服务架构保姆级教程(十三)tomcat环境安装以及LNMT架构

如果你想拥有你从未拥有过的东西&#xff0c;那么你必须去做你从未做过的事情 之前咱们学习了LNMP架构&#xff0c;但是PHP对于技术来说确实是老掉牙了&#xff0c;PHP的市场占有量越来越少了&#xff0c;我认识一个10年的PHP开发工程师&#xff0c;十年工资从15k到今天的6k&am…

elementUI Table组件实现表头吸顶效果

需求描述 当 table 内容过多的时候&#xff0c;页面上滑滚动&#xff0c;表头的信息也会随着被遮挡&#xff0c;无法将表头信息和表格内容对应起来&#xff0c;需要进行表头吸顶 开始编码&#x1f4aa; 环境&#xff1a;vue2.6、element UI step1&#xff1a; 给el-table__h…

AI 新动态:技术突破与应用拓展

目录 一.大语言模型的持续进化 二.AI 在医疗领域的深度应用 疾病诊断 药物研发 三.AI 与自动驾驶的新进展 四.AI 助力环境保护 应对气候变化 能源管理 后记 在当下科技迅猛发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;无疑是最具影响力的领域之一。AI 技…

题解 CodeForces 131D Subway BFS C++

题目传送门 Problem - 131D - Codeforceshttps://codeforces.com/problemset/problem/131/Dhttps://codeforces.com/problemset/problem/131/D 翻译 地铁方案&#xff0c;对于Berland城市来说是一种经典的表示&#xff0c;由一组n站点和连接这些站点的n通道组成&#xff0c;…

如何查看某用户的Git提交数

说明&#xff1a;有些公司自己搭建的Git仓库&#xff0c;可以在仓库项目上查看各用户的提交量及占比。也可通过下面这两个Git命令&#xff0c;查看当前仓库&#xff0c;当前分支的总提交数&#xff0c;及某用户的提交数&#xff1b; # 当前分支的总提交数 git log --oneline |…

SQL sever数据导入导出实验

1.创建数据库TCP-H &#xff08;1&#xff09;右键“数据库”&#xff0c;点击“新建数据库”即可 &#xff08;2&#xff09;用sql语言创建&#xff0c;此处以创建数据库DB_test为例&#xff0c;代码如下&#xff1a; use master;go--检查在当前服务器系统中的所有数据里面…

Codeforces Round 903 (Div. 3) E. Block Sequence

题解&#xff1a; 想到从后向前DP f[i] 表示从 i ~ n 转化为“美观”所需要的最少的步骤 第一种转移方式&#xff1a;直接删除掉第i个元素&#xff0c;那么就是上一步 f[i 1] 加上 1;第二种转移方式&#xff1a;从第 i a[i] 1 个元素直接转移&#xff0c;不需要增加步数&a…

linux-FTP服务配置与应用

也许你对FTP不陌生&#xff0c;但是你是否了解FTP到底是个什么玩意&#xff1f; FTP 是File Transfer Protocol&#xff08;文件传输协议&#xff09;的英文简称&#xff0c;而中文简称为 “文传协议” 用于Internet上的控制文件的双向传输。同时&#xff0c;它也是一个应用程序…

Alluxio 联手 Solidigm 推出针对 AI 工作负载的高级缓存解决方案

作者&#xff1a;Wayne Gao, Yi Wang, Jie Chen, Sarika Mehta Alluxio 作为全球领先的 AI 缓存解决方案供应商&#xff0c; 提供针对 GPU 驱动 AI 负载的高速缓存。其可扩展架构支持数万个节点&#xff0c;能显著降低存储带宽的消耗。Alluxio 在解决 AI 存储挑战方面的前沿技…