Python:从对中查找丢失的文件



我试图找到一些丢失的文件,但这些文件是成对的。

例如,我们有如下文件:file1_LEFTfile1_RIGHT文件2_LEFT文件2_RIGHTfile3_LEFTfile4_RIGHT…

ideea是名称相同,但它们有一对左右。通常我们有数千个文件,但在那里的某个地方,我们会发现一些没有配对的文件。与文件99_LEFT一样,存在但缺少RIGHT(反之亦然(。

我正在尝试用python 2.7制作一个脚本(是的,出于个人原因,我使用了一个旧的python……不幸的是(,但我不知道如何实现。尝试过的想法:-2乘2验证它们,并检查我们是否在当前文件中有RIGHT,在以前的文件中有LEFT,打印ok,否则打印不匹配的文件。但在第一个打印出来后,由于结构发生了变化,所有其他的都失败了,到那时我们就不会有左右一个挨着一个了,他们的顺序将被重新安排-为LEFT和RIGHT创建单独的列表并进行比较,但第一个列表会被找到,但对其他列表不起作用。

到目前为止我一直使用的代码:

import os
import fnmatch,re

path = raw_input('Enter files path:')
for path, dirname, filenames in os.walk(path):
for fis in filenames:
print fis
print len(filenames)
for i in range(1,len(filenames),2):
print filenames[i]
if "RIGHT" in filenames[i] and "LEFT" in filenames[i-1]:
print "Ok"
else:
print "file >"+fis+"< has no pair"
f = open(r"D:rec.txt", "a")
f.writelines(fis + "n")
f.close()

谢谢你抽出时间!

我们可以使用glob列出给定路径中的文件,并通过搜索模式进行过滤。

如果我们考虑一组全左文件名和另一组全右文件名,我们能说你在寻找不在这两个集合的交集中的元素吗?

这被称为";对称差";这两套中的一套。

import glob
# Get a list of all _LEFT filenames (excluding the _LEFT part of the name)
# Eg: ['file1', 'file2' ... ]. 
# Ditto for the _RIGHT filenames
# Note: glob.glob() will look in the current directory where this script is running. 
left_list = [x.replace('_LEFT', '') for x in glob.glob('*_LEFT')]
right_list = [x.replace('_RIGHT', '') for x in glob.glob('*_RIGHT')] 
# Print the symmetric difference between the two lists
symmetric_difference = list(set(left_list) ^ set(right_list))
print symmetric_difference
# If you'd like to save the names of missing pairs to file
with open('rec.txt', 'w') as f:
for pairname in symmetric_difference:
print >> f, pairname
# If you'd like to print which file (LEFT or RIGHT) is missing a pair
for filename in symmetric_difference:
if filename in left_list:
print "file >" + filename + "_LEFT< has no pair"
if filename in right_list:
print "file >" + filename + "_RIGHT< has no pair"

最新更新