Как я могу объединить файл по идентификатору? - PullRequest
1 голос
/ 10 апреля 2019

У меня проблема с объединением 2 .txt файлов в 1 txt файл. Я мог бы объединить их, но мне нужно объединить их в одной строке по идентификатору. Затем я должен записать данные в тот же идентификатор строки.

Этот код объединяется, но ниже текста

import shutil;
print("Enter 'x' for exit.");
filename1 = input("Enter first file name to merge: ");
if filename1 == 'x':
    exit();
else:
    filename2 = input("Enter second file name to merge: ");
    filename3 = input("Create a new file to merge content of two file inside this file: ");
    print();
    print("Merging the content of two file in",filename3);
    with open(filename3, "wb") as wfd:
        for f in [filename1, filename2]:
            with open(f, "rb") as fd:
                shutil.copyfileobj(fd, wfd, 102410);
    print("\nContent merged successfully.!");
    print("Want to see ? (y/n): ");
    check = input();
    if check == 'n':
        exit();
    else:
        print();
        c = open(filename3, "r");
        print(c.read());
        c.close();

Что у меня есть: (входные файлы)

text1.txt:

Id x y
1 6655,5 -3132,0

text2.txt:

Идентификатор z
1 111 222 333

Я хочу получить, например: *1024* (ожидаемый результат)

Id x y e n z
1 6655,5 -3132,0 111 222 333

1 Ответ

0 голосов
/ 10 апреля 2019

Предполагая одинаковое количество и порядок идентификаторов в обоих текстовых файлах, вы можете сделать это:

with open('text1.txt', 'r') as f1, open('text2.txt', 'r') as f2:
    f1_text = f1.read().splitlines()
    f2_text = f2.read().splitlines()
with open('text3.txt', 'w+') as f3:
    for i, item in enumerate(f1_text):
        value1 = f1_text[i].split(None, 1)[1].rstrip('\n')
        value2 = f2_text[i].split(None, 1)[1].rstrip('\n')
        if i == 0:
            i = 'Id'
        f3.write(str(i) + ' ' + value1 + ' ' + value2 + '\n')

with open('text3.txt', 'r') as f3:
    print(f3.read())

Input:
-----
"TEXT1.txt"
Id x y
1 6655.5 -3132.0
2 1122.3 -1234.0
3 4455.6 -5678.9
-----
"TEXT2.txt"
Id e n z 
1 111 222 333
2 444 555 666
3 777 888 999  
=====
Output:
"TEXT3.txt"
## Id x y e n z 
## 1 6655.5 -3132.0 111 222 333
## 2 1122.3 -1234.0 444 555 666
## 3 4455.6 -5678.9 777 888 999

(Предостережение: это будет работать с небольшими файлами, потому что приведенный ниже код считывает все текстовые файлы в память.Если ваши файлы очень большие, вам нужно будет настроить это с помощью генератора )

...