繁体   English   中英

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

[英]Comparing two lists of filenames that are not identical

我有一个包含csv和txt文件中的数据集的文件夹(一个实验一个csv和一个txt文件)。 我只想在可以找到csv和txt文件的情况下分析它们,形成一个“对”(并非总是如此)。

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

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)

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

新手在这里,请轻柔:)。

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

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

您需要将缩写的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

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

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

您真的需要两个清单吗? 只需存储所有需要的文件都存在的前缀列表,然后处理该列表即可。 另请注意,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')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM