Проверить одно и то же значение столбца в разных текстовых файлах? - PullRequest
0 голосов
/ 16 июня 2020

Допустим, у меня есть два текстовых файла, каждый из которых имеет два столбца:

text1.txt           text2.txt

col1   col2         col1   col2   

1      9            3      6
2      8            4      7
3      7            5      8
4      6            6      9

Теперь я хочу прочитать оба файла и проверить одинаковые значения в col1. Затем я хочу создать новый текстовый файл, содержащий три столбца: первый с идентичным значением и два других столбца с соответствующим значением col2 для каждого файла. Итак, для приведенного выше примера новый текстовый файл должен выглядеть так:

new_text.txt


col1   col2   col3 

3      7      6     
4      6      7                               

Поскольку 3 и 4 оба появляются в col 1 в обоих файлах. Что было бы эффективным способом сделать это?

Ответы [ 2 ]

1 голос
/ 16 июня 2020

In python3,

with open('text3.txt', 'w') as file3:
    print('col1\tcol2\tcol3', file=file3)
    with open('text1.txt', 'r') as f:
        file1 = f.readlines()
    with open('text2.txt', 'r') as f:
        file2 = f.readlines()
    for i in file1[1:]:
        line1 = i.split()
        for j in file2[1:]:
            line2 = j.split()
            if line1[0] == line2[0]:
                row = line1[0] + '\t' + line1[1] + '\t' + line2[1]
                print(row, file=file3)

Наивный способ заставить операцию работать - это перебирать оба файла вложенным образом и искать экземпляры, где col1 в первом файле равно col1 во втором файле.

Я настоятельно рекомендую вам попробовать пакет pandas. Требуемая операция может быть легко выполнена с помощью простой внутренней функции join, используя pandas.

Примером может быть

import pandas as pd

df1 = pd.read_csv('text1.txt', delim_whitespace=True)
df2 = pd.read_csv('text2.txt', delim_whitespace=True)
df3 = pd.merge(df1, df2, on='col1', how='inner')
df3.to_csv('text3.txt', index=False, sep=" ")
1 голос
/ 16 июня 2020
f1=open(file1,"r")
f2=open(file2,"r")

lines1=f1.readlines()
lines2=f2.readlines()

text1=[[]]
text2=[[]]

for x in lines1:
   text1.append(x.split(' ')[0],x.split(' ')[1]) // replace ' ' with the seperator between columns 
for x in lines2:
   text2.append(x.split(' ')[0],x.split(' ')[1]) // replace ' ' with the seperator 
f.close()

затем l oop по каждому 2d спискам, чтобы сгенерировать третий со значениями col1 и col2 / col3 с соответствующими col2 обоих текстовых файлов 1 и 2 по мере необходимости

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...