我正在尝试从两个单独的文件中获取文本,例如:
File 1:
000892834 13.663 0.098 0.871 0.093 0.745 4.611 4795
File 2:
892834 4916 75 37 4857 130 128 4795 4.61 -0.09 0 0
并获得如下输出:
892834 13.663 0.098 0.871 0.093 0.745 4.611 4795
892834 4916 4795 -0.09
我有一些似乎接近解决方案的代码:
filter_func_1 = lambda x: x >= 15
filter_func_2 = lambda x: (5777 + 100) > x > (5777 - 100)
mergedData = defaultdict(list)
with open('Table1_Karoff.txt') as file_1, open('Table7_Pinsonneault.txt') as file_2, open('Processed_Data.txt', 'w') as outfile:
for line_1 in file_1:
splt_file_1 = line_1.split()
if filter_func_1(splt_file_1[1]):
mergedData[splt_file_1[0].lstrip('0')].append(line_1)
for line_2 in file_2:
splt_file_2 = line_2.split()
Data = map(itemgetter(0, 1, 8, 9), line_2)
if filter_func_2(splt_file_2[1]):
mergedData[splt_file_2[0]].append([' '.join(map(str, i)) for i in Data])
for k in mergedData:
if len(mergedData[k]) == 2:
outfile.write("\n".join(mergedData[k]) + "\n")
return outfile
这段代码“应该”做的是使用 lambda 运算符创建两种过滤器,将每行中的某个索引与 lambda 函数进行比较,看看它是否为真,如果是,则将整行附加到一个列表中以供输出. 它还将“000”从文件 1 中第一个数字的开头剥离,并检查以确保两个文件中存在相同的第一个数字。
我的问题是:
1) file_1 ID #(第一个数字)没有正确地从其中删除所有 0,尽管据我所知代码应该这样做。它输出为 00892834,因此只删除了第一个 0。
2)添加过滤器后,根本不会将任何数据写入新文件,当我检查 line.split 是否正确创建了新列表时,它没有,这意味着没有要过滤的数据因为 splt_file_# 输入中没有数据。这对我来说很奇怪,我不明白这怎么可能发生。我通过在末尾添加一个应该写出 splt_file_1 和 splt_file_2 列表的写行来测试列表创建,但是它没有吐出任何东西。
3)由于我需要的值不能按顺序从文件 2 的列表中调用(我只需要索引 0、1、8、9)我尝试映射然后格式化数据,但这给出了一个超出范围的索引问题,这是可以理解的,因为我在上面 #2 中的问题。
我需要任何帮助来消除这些错误,我不知道我的代码是错误的还是我只是遗漏了一些东西,感谢您提供的任何帮助。