我在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)
列表中文件名的顺序以后很重要。
新手在这里,温柔地说:)。
答案 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')