Склеивание txt-файлов по данному столбцу
У меня есть несколько txt-файлов (~10шт.) одинаковой структуры: два столбца, первый из которых одинаковый для всех файлов. Подскажите, пожалуйста, как к данному txt-файлу присоединить вторые столбики из остальных файлов?
Например, в первом txt-файле у меня находятся такие данные:
506.000000 0.105
507.000000 0.204
508.000000 0.307
509.000000 0.408
во втором:
506.000000 0.005
507.000000 0.003
508.000000 0.004
509.000000 0.007
На выходе я хочу получить такой txt-файл:
506.000000 0.105 0.005
507.000000 0.204 0.003
508.000000 0.307 0.004
509.000000 0.408 0.007
Ответы (2 шт):
Я думаю, этот код сможет помочь вам. Он основан на базовом алгоритме "Кратность. Построение списка без повторений". У нас есть ключ (в данном случае значение в левом столбце) и значение (берётся из правого). Таким образом, мы можем создать структуру, в которой в качестве уникального ключа будет выступать значение из левого столбца, а в качестве списка значений (характеристик) будут выступать значения из правого.
Вместо "first.txt", "second.txt" и "third.txt" разместите пути до Ваших файлов.
dictionary = dict() # словарь без повторений
for file in ("first.txt", "second.txt"): # для каждого файла
with open(file, "r") as f: # открываем его в режиме чтения
for row in f: # перебираем строки
key, value = row.split(" ") # ключ/значение в файлах разделены пробелом
value = value.replace("\n", "") # удалям символ перехода на новую строку
if key in dictionary: # если такой ключ уже существует в словаре
dictionary[key].append(value) # то добавляем характеристику в список
else: # если мы встретили этот ключ впервые
dictionary[key] = [value] # создаём список характеристик с первой характеристикой
with open("third.txt", "w") as f:
for key in dictionary: # для каждого ключа получаем строку характеристик
string = ""
for value in dictionary[key]:
string += value + " "
# записываем в третий файл в формате "ключ *[список характеристик]\n"
f.write(key + " " + string + "\n")
можно попробовать примерно так (решение рабочее):
df = pd.concat([pd.read_csv(i, sep=' ', header=None, index_col=0) for i in files], axis=1)
#--------------------------------------------------------------------------^^^^^ пути к файлам
df.to_csv(filepath, sep=' ', header=False)
#---------^^^^^^^^ итоговый файл