本文最后更新于 1546 天前,其中的信息可能已经有所发展或是发生改变。
# 多行输出结果
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
python 的文件操作。在寒假补了很多剧,以前下载的剧的文件名很杂乱,所以就为了方便写了这些对文件名重命名以及文件整合的脚本,随便可以学习下 python 的文件和文件夹操作。
import os
import shutil
1. 批量重命名文件
2. 创建文件夹和文件
path = 'E:/Template'
for ii in range(1, 5):
try:
os.mkdir(path + '/md_%d' % ii)
except FileExistsError as e:
print('file or directory is already exist. Skip operation.')
file = open(path + '/md_%d/file_%d.txt' % (ii, ii), 'w')
file.write('this is file_%d in md_%d.\n' % (ii, ii))
file.close()
3. 批量移出
移动同级文件夹下指定格式的文件(或全部格式)到同一目录。
只检索此文件夹下的一级文件夹的文件。
path = 'E:/Template'
# default file extension: all
fileExt = ''
directorys = list(os.walk(path))[0][1]
directorys.sort(key=len)
dst = path + '/0_combined'
os.mkdir(dst)
for dirs in directorys:
dirPath = os.path.join(path, dirs)
files = list(os.walk(dirPath))[0][2]
for file in files:
curFileExt = os.path.splitext(file)[1]
if fileExt == '':
fileExt = curFileExt
if fileExt == curFileExt or fileExt == '.*':
filePath = os.path.join(dirPath, file)
dstPath = dst + '/%s' % file
print(filePath, ' -> ', dstPath)
shutil.move(filePath, dstPath)
E:/Template\md_1\file_1.txt -> E:/Template/0_combined/file_1.txt
E:/Template\md_2\file_2.txt -> E:/Template/0_combined/file_2.txt
E:/Template\md_3\file_3.txt -> E:/Template/0_combined/file_3.txt
E:/Template\md_4\file_4.txt -> E:/Template/0_combined/file_4.txt
函数总结
os.mkdir()
: 创建文件夹- FileExistsError: 文件存在异常,用来捕获文件或文件夹已经存在的错误
lis.sort(key=len)
: 对列表 lis 进行按照长度排序os.path.join()
: 合并路径os.walk()
: 返回一个目录树及文件的生成器os.path.splitext()
: 从文件名中分离出文件扩展名shutil.move()
: 移动文件或者文件夹
批量移出的使用
批量移出我没有做 gui,过段时间了再补吧。
使用场景:在 B站下载的视频会把每节都放在一个单独的文件夹里 (figure 1):
figure 1
每个文件夹下是这样的文件 (figure 2):
figure 2
在使用其他播放器来播放时就非常不方便,所以萌发了写一个将文件移出文件夹的目的。
在我这个例子中将上面第三部分的脚本的 path = 'E:/Template'
改为 path = 'F:/我的下载/C++/41559729'
,fileExt = ''
改为 fileExt = '.flv'
运行即可。
运行结果
如果还需要重命名,可以使用第一部分的 批量重命名文件-py