20220803python学习
本篇文章代码来自《Python编程快速上手——让繁琐工作自动化》
shutil模块
该模块可以让你在Python程序中复制、移动、重命名和删除文件。
复制文件和文件夹
调用shutil.copy(source, destination)
,将路径source处的文件复制到路径destination处的文件夹(source和destination都是字符串)。如果destination是一个文件名,那么它将作为被复制文件的新名字。该函数返回一个字符串,表示被复制文件的路径。
1 2 3 4 5 6 7 | >>> import shutil, os >>> from pathlib import Path >>> p = Path.home() >>> shutil.copy(p / 'spam.txt' , p / 'some_folder' ) 'C:\\Users\\Xfsadmin\\some_folder\\spam.txt' >>> shutil.copy(p / 'eggs.txt' , p / 'some_folder/eggs2.txt' ) WindowsPath( 'C:/Users/Xfsadmin/some_folder/eggs2.txt' ) |
第一个shutil.copy()
方法将文件C:\Users\Xfsadmin\spam.txt复制到文件夹C:\Users\Xfsadmin\some_folder。返回值是刚刚被复制的文件的路径。请注意,因为只是指定了一个文件夹作为目的地,所以原来的文件名spam.txt就被用作新复制的文件名。第二个shutil.copy()方法也将C:\Users\Xfsadmin\eggs.txt复制到文件夹C:/Users/Xfsadmin/some_folder/,但因为新文件提供了一个名字eggs2.txt。
shutil.copy()将复制一个文件,shutil.copytree()将复制整个文件夹以及它包含的文件夹和文件。调用shutil.copytree(source, destination),将路径source处的文件(包括它的所有文件和子文件夹)复制到路径destination处的文件夹。source和Destination参数都是字符串。该函数返回一个字符串,该字符串是新复制的文件夹的路径。
1 >>> import shutil, os 2 >>> from pathlib import Path 3 >>> p = Path.home() 4 >>> shutil.copytree(p/'spam', p/'spam_back') 5 WindowsPath('C:/Users/Xfsadmin/spam_back')
文件和文件夹的移动与重命名
调用shutil.move(source, destination),将路径source处的文件夹移动到路径destination,并返回新位置的绝对路径的字符串。
如果destination指向一个文件夹,那么source文件将移动到destination中,并保持原来的文件名。
>>> import shutil >>> shutil.move('C:\\Users\\Xfsadmin\\bacon.txt', 'c:\\Users\\Xfsadmin\\eggs') 'c:\\Users\\Xfsadmin\\eggs'
如果在C:\目录中已存在一个名为eggs的文件夹,调用shutil.move()方法就是将C:\bacon.txt移动到文件夹C:\eggs中。
如果在C:\eggs中已经存在一个文件bacon.txt,那么它就会被覆盖。
最后,构成目的地的各层级目录必须已经存在,否则Python会抛出异常。
永久删除文件和文件夹
利用os模块中的函数,可以删除一个文件或一个空白文件夹。利用shutil模块,可以删除一个文件夹及其所有的内容。
-
调用os.unlink(path)将删除path处的文件,文件会被永久删除。
-
调用os.rmdir(path)将删除path处的文件夹。该文件夹必须为空,其中不能有任何文件和文件夹。
-
调用shutil.rmtree(path)将删除path处的文件夹,它包含的所有文件和文件夹都会被删除。
import os for pathlib import Path for filename in Path.home().glob('*.rxt') #os.unlink(filename) print(filename)
现在os.unlink()调用被注释掉,因此python会忽略它。作为代替,输出将被删除的 文件名。先运行这个版本的程序,防止错误删除文件。
用send2trash模块安全地删除
因为Python内置的shutil.rmtree()函数将不可恢复地删除文件和文件夹,所有用起来很危险。删除文件和文件夹更好的方法是使用第三方的send2trash模块。
利用send2trash比用Python常规的删除函数要安全得多,因为它会将文件夹和文件发送到计算机的回收站,而不是永久删除它们。
>>> import send2trash >>> baconFile = open('bacon.txt', 'a') >>> baconFile.write('Bacon is not a vegetable.') 25 >>> baconFile.close() >>> send2trash.send2trash('bacon.txt')
一般来说,总是应该使用send2trash.send2trash()函数来删除文件和文件夹,它将文件发送到回收站,让你能够恢复文件,但这不像是永久删除文件,它不会释放磁盘空间。如果你希望程序释放磁盘空间,就要使用os和shutil来删除文件和文件夹。请注意,send2trash()函数只能将文件发送到回收站,不能从中恢复文件。
遍历目录树
import os for folderName, subfolders, filenames in os.walk('C:\\IsompSSO'): print('The current folder is ' + folderName) for subfolder in subfolders: print('SUBFOLDER OF' + folderName + ': ' + subfolder ) for filename in filenames: print('FILE INSIDE ' + folderName + ': ' + filename) print('')
os.wakl()函数被传入一个字符串值,即一个文件夹的路径。你可以在一个for循环语句中使用os.wale()函数遍历目录树,就像使用range()函数遍历某个范围的数字一样。不像range(),os,walk()在循环的每次迭代中返回以下3个值:
-
当前文件夹名称的字符串。
-
当前文件夹中子文件夹的字符串的列表。
-
当前文件夹中文件的字符串的列表。
所谓当前文件夹,是指for循环时迭代的文件夹。程序的当前目录不会因为os.walk()而改变。
用zipfile模块压缩文件
利用zipfile模块中的函数,Python程序可以创建和打开(或解压)ZIP文件。
读取ZIP文件
要读ZIP文件的内容,首先必须创建一个ZipFile对象(请注意大写首字符Z和F)。要创建一个ZipFile对象,就要调用zipfile.ZipFile()函数,向它传入一个字符串,表示ZIP文件的文件名。请注意,zipfile是Python模块的名称,ZipFile()是函数的名称。
>>> import zipfile, os >>> from pathlib import Path >>> p = Path.home() >>> exampleZip = zipfile.ZipFile(p/'test.zip') >>> exampleZip.namelist() ['test/', 'test/3.txt', 'test/4.txt', 'test/cc/', 'test/cc/1.txt', 'test/cc/2.txt'] >>> spamInfo = exampleZip.getinfo('test/3.txt') >>> spamInfo.file_size 0 >>> spamInfo.compress_size 0 >>> f'Compressed file is {round(spamInfo.file_size / spamInfo.compress_size, 2)}x smaller!' 'Compressed file is 1.0x smaller!' >>> exampleZip.close()
ZipFile对象有一个namelist()方法,它返回ZIP文件中包含的所有文件和文件夹的字符串的列表。这些字符串可以传递给ZipFile对象的getinfo()方法,返回一个关于特定文件的ZipInfor对象。ZipInfor对象有自己的属性,如表示字节数的file_size和compress.size。他们分别表示原来文件大小和压缩后文件大小。ZipFile对象表示整个归档文件,而ZipInfo对象则保存该归档文件中每个文件的有用信息。
从ZIP文件中解压缩
ZipFile对象的extractall()方法从ZIP文件中解压所有文件和文件夹,并将其放到当前工作目录中:
>>> import zipfile, os >>> from pathlib import Path >>> p = Path.home() >>> exampleZip = zipfile.ZipFile(p/'example.zip') >>> exampleZip.extractall() >>> exampleZip.close()
exmple.zip的内容将被解压缩到C:\。或者你可以向extractall()传递一个文件夹名称,它将文件解压缩倒那个文件夹,而不是当前工作目录。
ZipFile对象的extract()方法从ZIP文件中解压缩单个文件。
>>> exampleZip.extract('spam.txt') 'C:\\spam.txt' >>> exampleZip.extract('spam.txt', 'c:\\some\\name\\folders') 'C:\\some\\folders\\spam.txt' >>> exampleZip.close()
创建和添加到ZIP文件
要创建你自己的压缩ZIP文件,必须以“写模式”打开ZipFile对象,即传入'w'作为第二个参数。
>>> import zipfile >>> newZip = zipfile.ZipFile('new.zip', 'w') >>> newZip.write('spam.txt', compress_type=zipfile.ZIP_DEFLATED) >>> newZip.close()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!