我想请你帮忙。首先我想介绍一下我的问题。 我有两个带有数组的文件,每个文件就像一个数组,每个单词之间都有空格。
First: [9 columns] 3columns are important
2001 5276 data3 data4 data5 data6 data7 data8 data9
2001 23243 data3 data4 data5 data6 data7 data8 data9
....
2001 434343 data3 data4 data5 data6 data7 data8 data9
2002 233 data3 data4 data5 data6 data7 data8 data9
....
2002 23232 data3 data4 data5 data6 data7 data8 data9
Second:[5 columns]
2001 23243 data3' data4' data5'
2001 5276 data3' data4' data5'
....
2001 434343 data3' data4' data5'
2002 23232 data3' data4' data5'
....
2002 233 data3' data4' data5'
I would like to create one file from two above which will contain array as ex.:
2001 5276 data3 data3' data4' data5'
2001 23243 data3 data3' data4' data5'
....
我必须检查每个文件中前两列中的数据是否相等,然后将它们相加 :) 直到现在我已经找到了这个程序,但我不知道如何以正确的方式改变它
file2 = open('file2', 'r')
matrix1 = [line.rstrip().split(' ') for line in file1.readlines()]
matrix2 = [line.rstrip().split(' ') for line in file2.readlines()]
file1.close()
file2.close()
#combine
t_matrix1 = [[r[col] for r in matrix1] for col in range(len(matrix1[0]))]
t_matrix2 = [[r[col] for r in matrix2] for col in range(len(matrix2[0]))]
final_t_matrix = []
for i in (t_matrix1 + t_matrix2):
if i not in final_t_matrix:
final_t_matrix.append(i)
final_matrix = [[r[col] for r in final_t_matrix] for col in range(len(final_t_matrix[0]))]
#output
outfile = open('out.txt', 'w')
for i in final_matrix:
for j in i[:-1]:
outfile.write(j+', ')
outfile.write(i[-1]+'\n')
outfile.close()
最佳答案
这里你想要的是一个字典,将每行的前两列从 First
映射到整行。这样,当您通过 Second
时,您可以查找前两列,并附加到您在那里找到的行。
有几个问题需要回答才能准确地确定哪种字典:
- 行的顺序是否必须与它们在
First
中的顺序相同? - 如果
Second
中的行与First
中的行不匹配,会发生什么情况? - 反之亦然?
- 如果任一文件中的前两列相同有多行怎么办?
假设答案是“不,不会发生,不会发生,不会发生”。然后你可以使用一个简单的dict
:
with open('file1') as file1:
lines = (line.rstrip().split() for line in file1)
rows = {tuple(line[:2]): line[:3] for line in lines}
with open('file2') as file2:
for line in file2:
row = line.rstrip().split()
rows[tuple(row[:2])].append(row[2:])
with open('out.txt', 'w') as outfile:
for row in rows:
outfile.write(', '.join(row) + '\n')
如果我把第一部分写得更清楚一些,对于新手来说可能会更容易理解一些,所以让我这样做:
rows = {}
with open('file1') as file1:
for line in file1:
row = line.rstrip().split()
first_two_columns = tuple(line[:2])
first_three_columns = line[:3]
rows[first_two_columns] = first_three_columns
我做了一些其他的简化:
- 使用
with
语句避免必须调用close
。 - 不要使用
readlines
;一个文件已经是一个可迭代的行,您所做的就是让 Python 将整个文件读入内存,然后在您可以开始处理这些行之前将其拆分成更多内存中的行。 split()
拆分任何空格,这可能是您在这里想要的,而不是split(' ')
,它只拆分空格字符。', '.join(i)
为您提供i
的所有成员,每对之间有', '
,与您在内部循环中所做的相同。
关于python - 通过两列连接两个数组并删除不需要的部分 PYTHON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26984852/