У меня есть два файла, которые содержат два столбца для каждого, в первом столбце строки часто похожи.
file1.csv
C(2)—C(1) 1.5183
C(3)—C(2) 1.49
C(3)—C(1) 1.4991
O(4)—C(3) 1.4104
H(10)—O(4) 0.964
C(2)—C(1)—C(3) 59.19
C(3)—C(1)—H(5) 118.4
file2.csv
C(2)—C(1) 1.5052
C(3)—C(2) 1.505
C(3)—C(1) 1.5037
S(4)—C(3) 1.7976
H(10)—S(4) 1.3445
C(2)—C(1)—H(6) 117.68
C(2)—C(1)—C(3) 60.3
C(3)—C(1)—H(5) 116.99
Вот скрипт на Python, «использующий itertools», который сравнивает первый колон в файлах file1.csv и file2.csv, а затем печатает строки, аналогичные.
import itertools
files = ['file1.csv', 'file2.csv']
d = {}
for fi, f in enumerate(files):
fh = open(f)
for line in fh:
sl = line.split()
name = sl[0]
val = float(sl[1])
if name not in d:
d[name] = {}
if fi not in d[name]:
d[name][fi] = []
d[name][fi].append(val)
fh.close()
for name, vals in d.items():
if len(vals) == len(files):
for var in itertools.product(*vals.values()):
if max(var) - min(var) <= 20:
out = '{}\t{}'.format(name, "\t".join(map(str, var)))
print(out)
break
output.csv
C(2)-C(1) 1.5183 1.5052
C(3)-C(2) 1.49 1.505
C(3)-C(1) 1.4991 1.5037
C(2)-C(1)-C(3) 59.19 60.3
C(3)-C(1)-H(5) 118.4 116.99
но я не нахожу идеи печатать и разные строки.
мой желаемый вывод:
similar_lines
C(2)-C(1) 1.5183 1.5052
C(3)-C(2) 1.49 1.505
C(3)-C(1) 1.4991 1.5037
C(2)-C(1)-C(3) 59.19 60.3
C(3)-C(1)-H(5) 118.4 116.99
different_lines
O(4)-C(3) 1.4104 non
H(10)-O(4) 0.964 non
S(4)-C(3) non 1.7976
H(10)-S(4) non 1.3445
C(2)-C(1)-H(6) non 117.68