以聪明的方式重命名文件

时间:2016-06-06 15:14:54

标签: python naming

我有一组文件,我想用智能方式重新组织,使用python。 这些文件是特定于州 - 县的年份,并保存在此表单的文件夹结构中:\ state \ year \ county \ image.jpg,每个县有许多图像。 我有以下代码将所有文件复制并重命名为state_year_county_image.jpg:

import os, shutil
path = "C:\\Users\\me\\"
path_copies = "C:\\Users\\me\\copies\\"
state_list = os.listdir(path)
for state in state_list:
    year_list = os.listdir(path+state)
    for year in year_list:
        county_list = os.listdir(path+state+"\\"+year)
        for county in county_list:
            image_list = os.listdir(path+state+"\\"+year+"\\"+county)
            for image in image_list:
                path_old = path+state+"\\"+year+"\\"+county+"\\"+image
                path_new = path_copies+state+"_"+year+"_"+county+"_"+image
                shutil.copy(path_old, path_new)

如何更改我的文件命名机制(例如从当前的state_year_county_image.jpg到year_state_county_image.jpg或根据我以后可能需要的其他命名制度)?如果它允许更多的灵活性,我愿意采用其他一些基本命名约定,但我希望文件名能反映原始文件夹名称。

2 个答案:

答案 0 :(得分:0)

os.walk可能是你想要的。 此外,我建议不要将您的图片移到搜索目录中,因为这会导致重新处理时出现混乱。

这样的事情:

import os
import shutil

SRCDIR = r'C:\Users\me\originals'
DESTDIR = r'C:\Users\me\copies'

for dirname, dirs, files in os.walk(SRCDIR):
    dname = dirname.replace(os.path.sep, '_')
    for file in files:
        shutil.copy(file, os.path.join(DESTDIR, 
                                       "{}_{}".format(dname, file))

答案 1 :(得分:0)

这与Rename files to instead being in sub-directories, have the year as part of the filename

基本上是相同的问题

我建议您使用该伪代码,但使用新的模式和文件名表达式。您需要提供一些实际的文件名到Regex101中以构成样式,并需要确定输出格式。