我正在尝试将具有相似名称的所有文件列入单独的文件夹,但无法找出移动它们的名称。
从下面我将在我的工作目录中创建具有重复名称的文件夹,然后通过拆分函数传递所有文件以从xmlName = xml.split('.')[1]
行获取名称的中间部分。现在xmlName
只有部分文件名,这有助于我决定重复名称。
以下是工作目录中的文件列表:
# ls
CRON.JC_ADA_SOURCE_DLOAD.xml Duplicate TERA.SC_CACHE_PURGE_01.xml
CRON.JC_ADA_SOURCE_WLOAD.xml POWE.BI_RUN_INFO_WKFLW_INF1.xml test.py
CRON.SC_ADA_CLEANUP_SCRIPT.xml POWE.JC_ADA_SOURCE_DLOAD.xml Unknown
CRON.SC_CACHE_PURGE_01.xml POWE.SC_CHECK_ADA_DATA_FILE_INF2.xml
#
以下是代码(我不知道如何仅列出重复文件)。
#!/usr/bin/python
import os, sys
Working_Dir = "/home/export/Partition/JobDefinition"
if not os.path.exists('./Duplicate'):
os.makedirs('./Duplicate', 0755)
for path, dir, files in os.walk(Working_Dir):
for xml in files:
xmlName = xml.split('.')[1]
if xmlName == xmlName:
print xmlName
输出:
# python test.py
SC_ADA_CLEANUP_SCRIPT
SC_CHECK_ADA_DATA_FILE_INF2
JC_ADA_SOURCE_WLOAD
BI_RUN_INFO_WKFLW_INF1
JC_ADA_SOURCE_DLOAD
SC_CACHE_PURGE_01
JC_ADA_SOURCE_DLOAD
SC_CACHE_PURGE_01
py
#
我需要的是什么输出在名称下面,以便我可以将相应的文件移动到Duplicate文件夹:
JC_ADA_SOURCE_DLOAD
SC_CACHE_PURGE_01
答案 0 :(得分:1)
懒人答案
collections.Counter
将通过魔法做你想做的事。
MMDrawerController
不那么懒惰的答案
使用import collections
c = collections.Counter([])
for path, dir, files in os.walk(Working_Dir):
c += collections.Counter([xml.split('.')[1] for xml in files])
set
答案 1 :(得分:0)
如果你只想要重复,你可以在你找到它们时存储名称(设置最合适,但列表会这样做);如果你要放入的东西已经存在,那就是重复。
答案 2 :(得分:0)
如果您试图在列表中找到重复的元素,并仅为那些重复的元素创建其他列表,那么您可以这样做:
我在其中列出了a
列表,其中包含两个重复元素2
和3
。我在list a
中找到了这些元素,并创建了另一个列表b
,它只包含这两个元素。
import collections
a = [1,2,3,4,5,6,2,3,]
b = [item for item, count in collections.Counter(a).items() if count > 1]
当您打印b
时,输出为:
[2, 3]
然后,如果您还要从a
中删除重复的元素,则可以使用set
执行此操作:
a = set([1,2,3,4,5,6,2,3,])
现在,当您打印a
时,输出为:
set([1, 2, 3, 4, 5, 6])