Python - 将文件移动到包含部分文件名的文件夹

时间:2017-02-20 21:08:35

标签: python

我已经尝试了几次迭代的脚本,但现在又回到了一个空白的Notepad ++

我在表格中有6k个文件夹:

Reading Festival 1999
Reading Festival 2000
Reading Festival 2001
Leeds Festival 1999
Leeds Festival 2000
Leeds Festival 2001
Download Festival 2005
Download Festival 2006
...

在同一个文件夹中,我有一个很长的文件列表

Artist at {Festival Name} by Photographer - UID

Artist是在节日中扮演的人,Photographer是接受该节目的人,UID是唯一ID

我的问题是如何循环浏览文件夹,为每个文件夹查看文件名是否包含文件夹的名称,如果是,请将文件移到那里。

import os
rootdir = 'C:\Users\Alan\Desktop\VF'

for subdir, dirs, files in os.walk(rootdir):
    for d in dirs:
        for file in files:
            the_file = os.path.join(subdir, file)
            if d in the_file:
                new_loc = subdir + '\\' + d + '\\' + file
                os.rename(the_file, new_loc)

我有这个代码我相信应该工作但我担心的是它会读取文件夹中已有的所有图像。我怎么能避免这个?

1 个答案:

答案 0 :(得分:1)

由于您的文件和文件夹位于同一级别,因此您无需使用os.walk()来遍历目录树。正如您在评论中所指出的那样,os.listdir()会做。一种解决方案是使用os.listdir()获取目录和文件列表,并使用new_loc代替正则表达式,以与之前相同的方式查找in名称。

folders = [d for d in os.listdir('.') if os.path.isdir(d)]
files = [f for f in os.listdir('.') if os.path.isfile(f)]
for d in folders:
   for f in files:
      if d in f:
          new_loc = subdir + '\\' + d + '\\' + file
          os.rename(the_file, new_loc)

此处的逻辑与您的逻辑大致相同,只是采用不同的方式获取目录和文件!