我现在桌面上创建了名称分别为1,2的文件夹,在1中创建了python01,python02,python03,本文的所有操作都是在这基础上进行的。
一、shutil模块:在Python程序中复制、移动、改名和删除文件。
1.文件复制:调用shutil.copy(source, destination),将原始路径source处的文件复制到目标路径destination处的文件夹中(source和destination都是表示路径的字符串),如果destination是一个文件名,它将作为被复制文件的新名字。该函数返回复制后的文件路径,也是一个字符串。
>>> import shutil
>>> shutil.copy('C:\\Users\\King\\Desktop\\1\\python01.txt', 'C:\\Users\\King\\Desktop\\2')
'C:\\Users\\King\\Desktop\\2\\python01.txt'
>>> shutil.copy('C:\\Users\\King\\Desktop\\1\\python01.txt', 'C:\\Users\\King\\Desktop\\2\\python2_1')
'C:\\Users\\King\\Desktop\\2\\python2_1'
2.文件夹复制、备份:
shutil.copytree()
将复制整个原始文件夹,并创建一个新的文件夹来保存文件,若所创文件夹已存在,则报错提示。
>>> shutil.copytree('C:\\Users\\King\\Desktop\\1', 'C:\\Users\\King\\Desktop\\2')
'C:\\Users\\King\\Desktop\\2'
3.
文件和文件夹的移动和改名:
shutil.move(source, destination)
,将原始路径
source
处的文件(夹)移动到路径
destination
,返回新位置的绝对路径的字符串。
>>> shutil.move('C:\\Users\\King\\Desktop\\1', 'C:\\Users\\King\\Desktop\\2')
'C:\\Users\\King\\Desktop\\2\\1'
>>> shutil.move('C:\\Users\\King\\Desktop\\1\\python01.txt', 'C:\\Users\\King\\Desktop\\2')
'C:\\Users\\King\\Desktop\\2\\python01.txt'
注意:如果2中存在名称为1的文件夹,则不能移动;将文件夹1中的python01移动到2中(文件移动),若2中存在名称为python01的文件,则会覆盖本文件;destination路径也可以指定一个文件名(文件移动),那么source中的文件被移动后会改名为此文件名。
>>> shutil.move('C:\\Users\\King\\Desktop\\1\\python01.txt', 'C:\\Users\\King\\Desktop\\2\\python1.txt')
'C:\\Users\\King\\Desktop\\2\\python1.txt'
4.永久删除文件和文件夹:
4.1调用os.unlink(path)将删除path处的文件;
4.2调用os.rmdir(path)将删除path处的文件夹。该文件夹必须为空,即其中没有任何文件和文件夹;
4.3调用shutil.rmtree(path)将删除path处的文件夹,其目录下包含的所有文件和文件夹都会被删除。
>>> import os
>>> for file in os.listdir('C:\\Users\\King\\Desktop\\2'):
if file.endswith('.txt'): #endswith表示以什么结尾
print(file)
python1.txt
>>> for file in os.listdir('C:\\Users\\King\\Desktop\\2'):
if file.endswith('.txt'):
os.unlink(os.path.join('C:\\Users\\King\\Desktop\\2', file))
#这里不是没输出,而是以.txt结尾的文件python1.txt文件被删掉了
#os模块有不懂的,请参看上一篇博客
5.安全删除文件或文件夹:shutil.rmtree()函数不可恢复地删除文件和文件夹,有时会出现麻烦,这里说下第三方的send2trash模块,send2trash会将删除的文件等放到回收站,不会释放磁盘空间等同于Windows上一个先扔进回收站的操作,如果想继续使用,可以手动恢复。在Windows上,打开cmd命令行模式,然后输入pip回车,然后输入pip install send2trash即完成安装。
>>> import send2trash
>>> baconFile = open('bacon.txt', 'a') # creates the file
>>> baconFile.write('Bacon is not a vegetable.')
25
>>> baconFile.close()
>>> send2trash.send2trash('bacon.txt')
二、
遍历目录树:
os.walk()
函数在循环的每次迭代中,返回3个值:
1.当前文件夹名称的字符串;
2.当前文件夹中子文件夹名称的字符串的列表;
3.当前文件夹中文件名称的字符串的列表。
>>> import os
>>> for folderName, subfolders, filenames in os.walk('C:\\Users\\King\\Desktop\\1'):
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('')
The current folder is C:\Users\King\Desktop\1
SUBFOLDER OF C:\Users\King\Desktop\1: 1.1
FILE INSIDE C:\Users\King\Desktop\1: python01.txt
FILE INSIDE C:\Users\King\Desktop\1: python02.txt
FILE INSIDE C:\Users\King\Desktop\1: python03.txt
The current folder is C:\Users\King\Desktop\1\1.1
FILE INSIDE C:\Users\King\Desktop\1\1.1: python01.txt
FILE INSIDE C:\Users\King\Desktop\1\1.1: python02.txt
FILE INSIDE C:\Users\King\Desktop\1\1.1: python03.txt
三、
用zipfile模块压缩文件:
1.读取ZIP文件:用zipfile.ZipFile()函数来找到相应目录下的压缩文件。
>>> import zipfile
>>> myZip = zipfile.ZipFile('C:\\Users\\King\\Desktop\\1.zip')
>>> myZip.namelist()
['1/', '1/python01.txt', '1/python02.txt', '1/python03.txt']
>>> zipInfo = myZip.getinfo('1/python01.txt')
>>> zipInfo.file_size
13
>>> zipInfo.compress_size
15 #这里可以评论一下
>>> myZip.close()
2.从ZIP文件中解压缩:extractall(path)中可以传递一个文件夹名称,将压缩文件解压到此文件夹,而不是减压到当前工作目录。如果传递给extractall()方法的文件夹不存在,它会被创建。extract(path)方法用于从ZIP文件中解压缩单个文件,传递给extract()的字符串,必须匹配namelist()返回的字符串列表中的一个。
>>> import zipfile
>>> myZip = zipfile.ZipFile('C:\\Users\\King\\Desktop\\1.zip')
>>> myZip.extractall('C:\\Users\\King\\Desktop\\1')
>>> myZip.extract('1/python01.txt')
'C:\\Users\\King\\AppData\\Local\\Programs\\Python\\Python35\\1\\python01.txt' #单文件减压到当前工作路径
>>> myZip.extract('1/python01.txt', 'C:\\Users\\King\\Desktop\\2')
'C:\\Users\\King\\Desktop\\2\\1\\python01.txt' #单文件解压到制定路径
>>> myZip.close()
3.创建和添加到ZIP文件:要创建压缩ZIP文件,必须以“写模式”打开ZipFile对象,即传入'w'作为第二个参数。
>>> import zipfile, os
>>> os.getcwd() #查看当前工作路径
'C:\\Users\\King\\AppData\\Local\\Programs\\Python\\Python35'
>>> os.chdir('C:\\Users\\King\\Desktop') #更改当前工作路径到桌面
>>> os.getcwd()
'C:\\Users\\King\\Desktop'
>>> myZip = zipfile.ZipFile('1.zip', 'w') #创建名字为1的压缩文件,也可以直接在这里面创建压缩路径,比如'C:\\Users\\King\\Desktop\\1.zip'
>>> myZip.write('C:\\Users\\King\\Desktop\\1\\python01.txt', compress_type=zipfile.ZIP_DEFLATED) #将指定文件压缩进来
>>> myZip.close()