【问题标题】:How to move files to folders based on the similarity of filenames in python如何根据python中文件名的相似性将文件移动到文件夹
【发布时间】:2021-12-31 10:57:01
【问题描述】:

我有很多文件,例如这样的:

我想将这些文件根据它们的相似名称移动到文件夹中,例如: _form into the _form folder, _gallery into the _gallery folder, 75_gallery into the 75_gallery folder,和 75_gallery_from_home to 75_gallery_from_home folder.

_number 部分出现之前,我试图了解这些文件是相同的,我不知道如何拆分文件名,然后将它们移动到各自的文件夹中。请帮助我

【问题讨论】:

  • 你可以使用正则表达式来做到这一点!
  • 正则表达式?好的,谢谢,我会努力学习的。

标签: python file directory


【解决方案1】:

您可以使用以下脚本来提取相应的文件夹名称、创建文件夹以及将文件一次性移动到文件夹中。

import os
import re
import shutil

pattern = "_[0-9]+"

file_names = os.listdir(".")
for file_name in file_names:
    split = re.split(pattern, file_name)

    if len(split) == 1:
        print(f"Cannot extract the corresponding folder name from file {file_name}.")
    else:
        folder_name = split[0]
        
        if not os.path.exists(folder_name):
            os.mkdir(folder_name)

        shutil.move(file_name, os.path.join(folder_name, file_name))        

正则表达式模式允许您将文件名拆分为第一个下划线后跟任意数字。

【讨论】:

  • 等等,为什么这么简单?对我来说就像魔术一样!如果你不介意,我想问一下,split 的作用是什么,最终被 split[0]?
  • aaa,我刚收到,再次感谢您的帮助。
  • 不客气!
【解决方案2】:

您可以将以下内容作为解决方案的起点。假设您已排除文件扩展名并且仅在变量中有文件名,以下代码显示如何使用 regex 获取文件名的初始部分,以便您 可以框出要移动文件的文件夹名称。

import re

filename = "75_gallery_2686WYWENDD"
x = re.split("_", filename)
str=''
for k in x:
    if(re.search("^[0-9][0-9]",k)):
        if(len(k)>2):
            #ignore this part of file name
            print('ignoring ' + k)
        else:
            str = str + k
    else:
        str = str + '_' + k
print('folder name : ' + str)

【讨论】:

  • aaa,读了几遍后,我开始明白你的意思了。我将尝试弄清楚如何创建一个文件夹并遍历我拥有的所有文件,感谢您的帮助和解释。
  • 在下面的答案中,您也填写了如何以编程方式创建文件夹。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-15
  • 1970-01-01
  • 1970-01-01
  • 2019-06-15
  • 1970-01-01
  • 2019-12-28
  • 1970-01-01
相关资源
最近更新 更多