python文件及文件夹操作


# 多行输出结果
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"

python 的文件操作。在寒假补了很多剧,以前下载的剧的文件名很杂乱,所以就为了方便写了这些对文件名重命名以及文件整合的脚本,随便可以学习下 python 的文件和文件夹操作。

import os
import shutil

1. 批量重命名文件

批量重命名文件-py

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):

1551789520653
figure 1

每个文件夹下是这样的文件 (figure 2):

1551789561666
figure 2

在使用其他播放器来播放时就非常不方便,所以萌发了写一个将文件移出文件夹的目的。

在我这个例子中将上面第三部分的脚本的 path = 'E:/Template' 改为 path = 'F:/我的下载/C++/41559729'fileExt = '' 改为 fileExt = '.flv' 运行即可。

运行结果
1551790412333

1551790483512

如果还需要重命名,可以使用第一部分的 批量重命名文件-py

评论
还没有评论
    发表评论 说点什么