比较两个不相同的文件名列表

时间:2016-03-09 15:55:14

标签: python list

我在csv和txt文件中有一个包含数据集的文件夹(一个实验用一个csv和一个txt文件)。我想分析它们只有我能找到csv和txt文件,形成一对"对#34; (情况并非总是如此)。

我在文件夹中创建了两个文件列表:

list_signal =  glob.glob(filepath + '/*.txt')
list_zvec = glob.glob(filepath + '/*.csv')

我的想法是比较两个列表并创建只有匹配名称的新列表。问题是文件名不相同。对子看起来像这样:

2013_09_12__14_12_06h_zvec.csv

2013_09_12__14_12_06h_signal.txt

2013_09_12__14_12_45h_zvec.csv

2013_09_12__14_12_45h_signal.txt

我正在思考这些问题,但Python并不欣赏它(返回一个空列表,可能是将文件名中的前21个字符从一个列表与另一个列表中的全长文件名进行比较):

for filename in list_signal:
    if filename[0:21] in file_list_zvec:
        list_zvec2.append(filename)

列表中文件名的顺序以后很重要。

新手在这里,温柔地说:)。

4 个答案:

答案 0 :(得分:0)

听起来您需要file_list_zvec的缩短文件名列表:

[f[0:21] for f in file_list_zvec]

答案 1 :(得分:0)

您需要将缩短的名称signal[:21]与其他file_list_zvec列表中的每个项目相匹配

for signal in list_signal:
    for zvec in file_list_zvec:
        if signal[:21] in zvec:
            list_zvec2.append(signal)
            break

答案 2 :(得分:0)

这应该找到目录中多次出现(具有不同扩展名)的所有文件名:

import os

filelist=os.listdir(os.getcwd())
filenames=[]
for thisfile in filelist:
    filename=thisfile[0:22]
    filenames.append(filename)
files=set()
doubles=set( x for x in filenames if x in files or files.add(x) )

不是您可以使用以下内容迭代至少出现一次的所有文件名:

for filename in doubles:
  # whatever you want to do with the filename

答案 3 :(得分:0)

你真的需要两个名单吗?只需存储所有必需文件所在的前缀列表,然后处理该列表。还要注意,glob不仅返回文件名的完整路径,因此[0:21]可能无法正常工作。

## to initialize
prefixes = []

for file in glob.glob(filepath + '/*.txt'):
    prefix = os.path.basename(file)[:21]

    if os.path.exists(filepath + '/' prefix + '_zvec.csv'):
        prefixes.append(prefix)

## ...      
## then later on, when processing
for prefix in prefixes:
    processTxt(filepath + '/' prefix + '_signal.txt')
    processCsv(filepath + '/' prefix + '_zvec.csv')