Python匹配文件名并放入文件夹

时间:2015-10-07 15:46:49

标签: python

我试图匹配文件夹中的所有文件名,并将它们放在带有文件名的自己的单独文件夹中。下面是一个例子:

2015-05-14#6449618a-f819-4d71-83ad-a1e4c2fe9bc1.csv
2015-05-14#6449618a-f819-4d71-83ad-a1e4c2fe9bc1.xml
2015-05-14#6449618a-f819-4d71-83ad-a1e4c2fe9bc1.doc
2015-05-14#6449618a-f819-4d71-83ad-a1e4c2fe9bc1.dox

2015-05-14#7449618a-f819-4d71-83ad-a1e4c2fe9bc1.csv
2015-05-14#7459618a-f819-4d71-83ad-a1e4c2fe9bc1.xml
2015-05-14#7459618a-f819-4d71-83ad-a1e4c2fe9bc1.doc
2015-05-14#7459618a-f819-4d71-83ad-a1e4c2fe9bc1.doc

我想将这些文件分组到一个文件夹中,其中foldername为

2015-05-14#7449618a-f819-4d71-83ad-a1e4c2fe9bc1
2015-05-14#6449618a-f819-4d71-83ad-a1e4c2fe9bc1

请记住,文件夹中有数百个这样的文件,我试图让它们更整洁:)

到目前为止我得到了什么......

for file in os.listdir(src_path):
    if not os.path.isdir(dest_path + file.split("-")[:11]):
       os.mkdir(dest_path + file.split("-")[0])
shutil.copy(src_path + file, dest_path + file.split("-")[:11])

我的想法是匹配前11位数字。

2 个答案:

答案 0 :(得分:1)

如果你想提取这个:

2015-05-14#7449618a-f819-4d71-83ad-a1e4c2fe9bc1

只需使用splitext中的os.path分割点,即可轻松获取您想要的文件夹名称:

fname, fext = os.path.splitext('2015-05-14#6449618a-f819-4d71-83ad-a1e4c2fe9bc1.csv')

fname将保留2015-05-14#7449618a-f819-4d71-83ad-a1e4c2fe9bc1 fext将保留csv

额外的信息。不要使用file,它是Python的内置代码:https://docs.python.org/2/library/functions.html#file

这可能会导致问题。请尝试fname或仅f

答案 1 :(得分:1)

我认为你最好跑步:

file.rsplit(".",1)[0]

将为您提供用于目录的路径名称 使用rsplit而不是split的原因是为了防止您的文件名中包含多个句号。 请注意,您可以使用以下方法获得相同的结果:

file.rpartition(".")[0]