Найти - Пользователи
Полная версия: Сравнение и замена текста в 2 txt файлах
Начало » Python для новичков » Сравнение и замена текста в 2 txt файлах
1
deluxxx
Помогите, пожалуйста, кодом решения следующей проблемы

есть два тхт файла
первый содержит текст следующего вида

Андрей;123;789
Светлана;7250;924
Игорь;756758;7538

второй содержит текст следующего вида

123;789;QQQ
7250;924;RRR
756758;7538;TTT

нужно сделать их сравнение и замену при совпадении и сохранение в отдельный файл
пример
Андрей;123;789 = 123;789;QQQ сохранение Андрей;QQQ
ZerG
В чем сложность?
Покажите код? Что не получаеться?
marvellik
ну как вариант
 with open('1.txt') as file_1 , open('2.txt') as file_2:
    list_file_1 = [i.strip() for i in file_1.readlines()]
    list_file_2 = [i.strip() for i in file_2.readlines()]
list_3 = []
for i in list_file_1:
    elem = i[i.find(';')+1:]
    for j in list_file_2:
        if elem in j:
            list_3.append ('{};{}'.format(i.split(';')[0],j.split(';')[-1]))
with open('3.txt','w') as file_3:
    for i in list_3:
        file_3.write(i+'\n')
doza_and
marvellik
ну как вариант
еще вариант
 import pandas as pd
f1=pd.read_csv("f1.txt",delimiter=";",header=None)
f1.columns=["name","i1","i2"]
f2=pd.read_csv("f2.txt",delimiter=";",header=None)
f2.columns=["i1","i2","name"]
print(pd.merge(f1,f2,on=["i1","i2"]))
>>>         name_x      i1       i2    name_y
         0   Светлана    7250   924    RRR
         1     Игорь  756758  7538    TTT
marvellik
doza_and
еще вариант
так результат немного не тот
 Светлана    7250   924    RRR
 Игорь  756758  7538    TTT
deluxxx
сохранение Андрей;QQQ
то есть цифры не должны прописываться
 Андрей;QQQ
Светлана;RRR
Игорь;TTT
хотя если прописать в файл
 res = 'Светлана    7250   924    RRR'.split()
print('{};{}'.format(res[0],res[-1]))
>>> Светлана;RRR
doza_and
marvellik
так результат немного не тот
я этим кодом немного не то хотел сказать.
Загрузка данных из таблицы в файле, сохранение в файл и различные виды join таблиц, совершенно стандартные операции, нет смысла их каждый раз переоткрывать заново.

Ну и выборка колонок таблицы очевидно тоже есть :).
 res[['name_x','name_y']]

В большинстве случаев самописный вариант оказывается хуже. Например у вас трудоемкость O(N1*N2). В merge наверное O(N1+N2).
 list_file_1 = [i.strip() for i in file_1.readlines()]
лучше заменить на
 list_file_1 = file_1.read().split()
конструкция
 if elem in j
Если я правильно понимаю будет неправильно срабатывать на комбинации
 ([a,i1,i2],[b,i1,i2])

Но ваш код конечно будет полезен ТС, поскольку показывает как использовать основные конструкции языка.
deluxxx
всем спасибо за помощь с кодом разобрался
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB