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())#0f.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 ospath = 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 shutilshutil.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()
四、思维导图
相关文章:
Python----Python高级(文件操作open,os模块对于文件操作,shutil模块 )
一、文件处理 1.1、文件操作的重要性和应用场景 1.1.1、重要性 数据持久化: 文件是存储数据的一种非常基本且重要的方式。通过文件,我们可 以将程序运行时产生的数据永久保存下来,以便将来使用。 跨平台兼容性: 文件是一种通用…...
“AI 大模型内容安全审核软件系统:守护网络世界的卫士
在如今这个信息爆炸的互联网时代,网络上的内容那是五花八门、层出不穷。这时候,咱就得靠 AI 大模型内容安全审核软件系统来给咱把把关了。 咱就说社交媒体平台吧,每天都有海量的用户在上面发布文字、图片、视频啥的。要是没有一个靠谱的审核系…...
快速入门Python的异步库:asyncio
目录 异步 Python asyncio 1. async 关键字 2. await 关键字 3. asyncio.run() 4. asyncio.sleep() 5. 协程 程序执行流程 可以被等待的异步 协程 任务 Futures 任务 asyncio.create_task() await 和任务结果 Reference 异步 我们首先先来谈谈异步,…...
大美祖国-使用Java盘点那些在地名中出现最多的汉字
目录 前言 一、地名数据准备 1、全国地名数据 二、使用Java进行汉字统计 1、汉字数据统计 2、汉字分割统计 三、浅谈地名汉字名次及其意义 1、山、城、江、河 2、安、平、宁 3、地名中的方位 四、总结 前言 在中国这片古老而又年轻的土地上,地名不仅仅是地…...
华为OD机试E卷 --羊、狼、农夫过河--24年OD统一考试(Java JS Python C C++)
文章目录 题目描述输入描述输出描述用例题目解析JS算法源码Java算法源码python算法源码c算法源码c++算法源码题目描述 羊、狼、农夫都在岸边,当羊的数量小于狼的数量时,狼会攻击羊,农夫则会损失羊。农夫有一艘容量固定的船,能够承载固定数量的动物。 要求求出不损失羊情况…...
Java - WebSocket
一、WebSocket 1.1、WebSocket概念 WebSocket是一种协议,用于在Web应用程序和服务器之间建立实时、双向的通信连接。它通过一个单一的TCP连接提供了持久化连接,这使得Web应用程序可以更加实时地传递数据。WebSocket协议最初由W3C开发,并于2…...
JavaWeb开发(十五)实战-生鲜后台管理系统(二)注册、登录、记住密码
1. 生鲜后台管理系统-注册功能 1.1. 注册功能 (1)创建注册RegisterServlet,接收form表单中的参数。 (2)service创建一个userService处理业务逻辑。 (3)RegisterServlet将参数传递给ser…...
【深度学习】利用Java DL4J 训练金融投资组合模型
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,高并发设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s…...
【MySQL篇】事务的认识以及四大特性
何为事务? 事务(Transaction)是指一组操作的集合,这些操作要么全部执行成功,要么全部不执行。事务通常用于保证数据库的一致性、完整性和可靠性,确保数据的完整性与正确性。 有效避免部分执行࿰…...
CSS 网络安全字体
适用于 HTML 和 CSS 的最佳 Web 安全字体 下面列出了适用于 HTM L和 CSS 的最佳 Web 安全字体: Arial (sans-serif)Verdana (sans-serif)Helvetica (sans-serif)Tahoma (sans-serif)Trebuchet MS (sans-serif)Times New Roman (serif)Georgia (serif)Garamond (se…...
实战演示:利用ChatGPT高效撰写论文
在当今学术界,撰写论文是一项必不可少的技能。然而,许多研究人员和学生在写作过程中常常感到困惑和压力。幸运的是,人工智能的快速发展为我们提供了新的工具,其中ChatGPT便是一个优秀的选择。本文将通过易创AI创作平台,…...
显卡(Graphics Processing Unit,GPU)架构详细解读
显卡架构主要分为两大类:GPU 核心架构(也称为图形处理单元架构)和显卡的其他组件(如内存、控制器、输出接口等)。本篇文章将对显卡架构进行详细分析,重点介绍 GPU 核心架构、显卡计算单元、显存结构、显卡管…...
OpenCV相机标定与3D重建(63)校正图像的畸变函数undistort()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 转换图像以补偿镜头畸变。 该函数通过变换图像来补偿径向和切向镜头畸变。 此函数仅仅是 initUndistortRectifyMap(使用单位矩阵 R…...
人工智能-机器学习之多分类分析(项目实战二-鸢尾花的多分类分析)
Softmax回归听名字,依然好像是做回归任务的算法,但其实它是去做多分类任务的算法。 篮球比赛胜负是二分类,足球比赛胜平负就是多分类 识别手写数字0和1是二分类,识别手写数字0-9就是多分类 Softmax回归算法是一种用于多分类问题…...
【JDBC】数据库连接的艺术:深入解析数据库连接池、Apache-DBUtils与BasicDAO
文章目录 前言🌍 一.连接池❄️1. 传统获取Conntion问题分析❄️2. 数据库连接池❄️3.连接池之C3P0技术🍁3.1关键特性🍁3.2配置选项🍁3.3使用示例 ❄️4. 连接池之Druid技术🍁 4.1主要特性🍁 4.2 配置选项…...
【Envi遥感图像处理】006:影像融合(高光谱+多光谱)的方法
文章目录 一、图像融合概述二、加载数据三、图像融合操作四、结果比对五、高光谱与多光谱一、图像融合概述 图像融合是指将不同类型传感器的影像进行融合,既能使图向具有较高的空间分辨率,又具有多光谱的特性。 二、加载数据 三、图像融合操作 在ENvi中,图像融合使用的工具…...
C语言内存之旅:从静态到动态的跨越
大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言正文一 动态内存管理的必要性二 动态…...
Git本地搭建
Git本地搭建 (项目突然不给创建仓库了,为了方便管理项目只能自己本地搭建git服务) 为了在本地搭建Git环境并实现基本的Git操作,步骤如下: 安装Git软件 Windows:从Git官方网站下载并安装适用于Windows…...
电商|基于java的农业电商系统(源码+数据库+文档)
农业电商系统 目录 基于java的农业电商系统 一、前言 二、系统设计 三、系统功能设计 系统功能实现 前台: 后台: 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️…...
c语言分支和循环
文章目录 前言 一、分支结构 if语句 switch语句 三目运算符 二、循环结构 while循环 do-while循环 for循环 循环嵌套 循环控制语句 总结 前言 分支和循环是C语言中非常重要的控制结…...
大象机器人发布首款穿戴式数据采集器myController S570,助力具身智能数据收集!
myController S570 具有较高的数据采集速度和远程控制能力,大大简化了人形机器人的编程。 myController S570 是一款可移动的轻量级外骨骼,具有 14 个关节、2 个操纵杆和 2 个按钮,它提供高数据采集速度,出色的兼容性,…...
【HarmonyOS NEXT】华为分享-碰一碰开发分享
关键词:鸿蒙、碰一碰、systemShare、harmonyShare、Share Kit 华为分享新推出碰一碰分享,支持用户通过手机碰一碰发起跨端分享,可实现传输图片、共享wifi等。我们只需调用系统 api 传入所需参数拉起对应分享卡片模板即可,无需对 U…...
基于python+Django+mysql鲜花水果销售商城网站系统设计与实现
博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育、辅导。 所有项目都配有从入门到精通的基础知识视频课程ÿ…...
Linux C\C++方式下的文件I/O编程
【图书推荐】《Linux C与C一线开发实践(第2版)》_linux c与c一线开发实践pdf-CSDN博客 《Linux C与C一线开发实践(第2版)(Linux技术丛书)》(朱文伟,李建英)【摘要 书评 试读】- 京东图书 Lin…...
2025寒假备战蓝桥杯01---朴素二分查找的学习
文章目录 1.暴力方法的引入2.暴力解法的思考 与改进3.朴素二分查找的引入4.朴素二分查找的流程5.朴素二分查找的细节6.朴素二分查找的题目 1.暴力方法的引入 对于下面的这个有序的数据元素的组合,我们的暴力解法就是挨个进行遍历操作,一直找到和我们的这…...
AI时代:弯道超车的新思维与实践路径
大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的…...
HunyuanDiT代码笔记
HunyuanDiT 是由腾讯发布的文生图模型,适配中英双语。 在模型方面的改进,主要包括: transformer结构text encoderpositional encoding Improving Training Stability To stabilize training, we present three techniques: We add layer nor…...
C++: Dtrees:load(constg String filepath, const String nodeName)中nodeName参数含义
1. nodeName 的作用 当你保存模型时,整个决策树会被序列化到一个 XML 或 YAML 文件中。nodeName 是加载时指定的一个逻辑路径,用于从文件中找到某个节点或子结构,而不是存储在文件中的字段。如果你不指定 nodeName,OpenCV 默认会…...
项目练习:若依后台管理系统-后端服务开发步骤(springboot单节点版本)
文章目录 1、用Maven搭建项目脚手架,父子工程依赖。2、引入SpringBoot Web容器依赖3、引入Mybatisdruid依赖4、实现接口查询数据5、整合logback日志功能 1、用Maven搭建项目脚手架,父子工程依赖。 root模块的pom添加plugin配置 <build><plugins…...
Ubuntu安装docker
snap install docker # version 27.2.0, or apt install podman-docker # version 3.4.4ds1-1ubuntu1.22.04.2 apt install docker.io # version 24.0.7-0ubuntu2~22.04.1 我应该安装哪一个,部署企业级应用? 在部署企业级应用时,选择合适的容器化…...
windows11下 podman-desktop 复制插件文件 到 RabbitMQ 容器内,并启用
目的: 刚启用的 RabbitMQ 容器,发现没有rabbitmq_delayed_message_exchange 插件,开始手动安装 官网 https://www.rabbitmq.com/community-plugins 或 https://github.com/rabbitmq/rabbitmq-delayed-message-exchange 下载rabbitmq_delay…...
Quickstart C++ with cmake, visualstudio | CPP
本文属于 C 系列文章,下一篇文章见 Quick get started with vcpkg, windows visual studio | CPP 目录 cmake-visualstudio-quickstartDepsConfigureBuild with CLILINKS cmake-visualstudio-quickstart https://github.com/hailiang-wang/cmake-visualstudio-quic…...
惊叹数据结构之美,品味排序算法之妙:对四大排序的详细介绍
大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 正文一、冒泡排序(Bubble Sor…...
机器学习——什么是代价函数? 下
“上次课讲了机器学习的模型表示,讲了一个线性模型的例子,那怎样在可能的拟合直线里选择一条最合适的呢?有没有数学的方法让这个直线合适还是不合适变得可以量化呢?这就要说代价函数了。” 本次课前半段内容非常简单,带领我们一起复习初中平面几何的知识,后半段给出了代价…...
Ubuntu本地部署网站
目录 1.介绍 2.安装apache 3.网页升级 1.介绍 网站其实就相当于一个文件夹,用域名访问一个网页,就相当于访问了一台电脑的某一个文件夹,在网页中看见的视频,视频和音乐其实就是文件夹里面的文件。为什么网页看起来不像电脑文件夹…...
hydra破解密码
hydra九头蛇是常用的密码破解工具 1、破解centos ssh密码 hydra -l root -P password.txt ssh://192.168.1.107:2222 hydra -l root -P password.txt -s 2222 192.168.1.107 ssh2、破解ftp hydra -l allen -P e:\aa.txt ftp://127.0.0.1 hydra -l allen -P e:\aa.txt ftp:…...
华为OD机试E卷 --字符串变换最小字符串 --24年OD统一考试(Java JS Python C C++)
文章目录 题目描述输入描述输出描述用例题目解析JS算法源码java算法源码python算法源码c算法源码c算法源码 题目描述 给定一个字符串s,最多只能进行一次变换,返回变换后能得到的最小字符串(按照字典序进行比较)。 变换规则&#…...
用户中心项目教程(二)---umi3的使用出现的错误
目录 1.情况的说明 2.遇到的问题 1)第一个问题-关于npx的使用 2)第二个问题--unsupport问题 3)第三个收获--nodejs安装问题 4)第四个收获---nvm下载问题 5)第五个问题--尚未解决的问题 3.个人总结 1.情况的说明…...
具身智能新突破!Physical Intelligence推出机器人动作tokenizer,训练提速5倍
具身智能,是人工智能(AI)行业的下一个浪潮。如何有效训练 Transformers 模型来控制具身机器人,是当前亟需要解决的难题,尤其是对于更复杂、需要精确和高频控制的精巧技能,现有的视觉-语言-动作(…...
Unity 学习指南与资料分享
Unity学习资料 Unity学习资料 Unity学习资料 Unity 作为一款强大的跨平台游戏开发引擎,在游戏开发及实时 3D 内容创作领域占据着重要地位。它功能丰富、易于上手,支持多平台发布,为开发者提供了广阔的创作空间。下面为你带来全面的 Unity 学…...
react什么时候用箭头函数,什么时候不需要
最近从vue项目转到react,太久没写了。遇到了一些卡住的问题,记录一下。 在 JavaScript 和 React 开发中,箭头函数(Arrow Functions)的使用主要取决于上下文、代码简洁性和特定需求。以下是关于何时使用箭头函数以及何时…...
软考中级复习篇章:数据结构部分的复习
软考中级快速通过篇章:数据结构部分的复习 一、引言 在软考中级的备考过程中,数据结构是极为重要的一个部分。它不仅是计算机科学的基础,也是软考中考查的重点知识领域。扎实掌握数据结构相关内容,对于顺利通过软考中级考试起着…...
【Vim Masterclass 笔记22】S09L40 + L41:同步练习11:Vim 的配置与 vimrc 文件的相关操作(含点评课内容)
文章目录 S09L40 Exercise 11 - Vim Settings and the Vimrc File1 训练目标2 操作指令2.1. 打开 vimrc-sample 文件2.2. 尝试各种选项与设置2.3. 将更改内容保存到 vimrc-sample 文件2.4. 将文件 vimrc-sample 的内容复制到寄存器2.5. 创建专属 vimrc 文件2.6. 对于 Mac、Linu…...
Spring Boot 整合 PageHelper 实现分页功能
在开发 Web 应用时,分页功能几乎是必不可少的。Spring Boot 提供了强大的功能来简化开发,而 PageHelper 则是一个优秀的 MyBatis 分页插件,可以极大地简化分页查询的代码。本文将介绍如何在 Spring Boot 项目中整合 PageHelper,并…...
Redis和MongoDB的区别
前言 在项目选型阶段,MongoDB被选中主要是基于其处理大规模数据集的能力,而当时并未深入探讨其他替代方案。此前,Redis被用于管理少量但访问频繁的热数据。目前,项目采用MongoDB存储百万级数据,预计未来数据量将增长至…...
Java基础(2)
博客:深入理解浮点型数据、计算机视觉信息存储与类型转换 四、浮点型数据 在编程语言中,浮点型数据主要包括float(单精度)和double(双精度)。计算机默认使用double类型存储小数,这会引发一些特…...
D3.js及实例应用
文章目录 D3.jsd3.js 应用实例图标展示点击选择拖拉拽应用 D3.js D3.js是一个功能强大的JavaScript库,除了图标展示,还能实现多种类型的交互效果: 数据可视化交互 动态更新图表:根据用户操作(如点击按钮、选择下拉菜…...
管理权限特权
管理权限 Oracle 用户权限分为两种类型: 系统权限:允许用户在数据库中执行特定的操作。 对象权限:允许用户访问和操作特定的对象。 系统权限 Oracle 数据库中有超过100种不同的系统权限。权限中的 “ANY” 关键字表示用户在任何模式&#x…...
基于海思soc的智能产品开发(视频的后续开发)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们讨论了camera,也讨论了屏幕驱动,这些都是基础的部分。关键是,我们拿到了这些视频数据之后,…...
为什么相关性不是因果关系?人工智能中的因果推理探秘
目录 一、背景 (一)聚焦当下人工智能 (二)基于关联框架的人工智能 (三)基于因果框架的人工智能 二、因果推理的基本理论 (一)因果推理基本范式:因果模型࿰…...