Обработка данных с помощью Python: преобразование строки в строки
Я довольно новичок в Python, и мне нужно выполнить некоторые данные. Мне нужен совет относительно наилучшей практики для этого: библиотеки, модули, лучший код для реализации или просто руководство.
Итак, у меня есть текстовый файл с данными, организованными в следующем формате:
A:100 B:200 C:300
A:150 B:350 C:370
Т.е. каждая строка представляет связанные данные, 3 переменные, названные A/B/C. Каждая новая строка показывает данные, относящиеся к тем же переменным, но связанным с другим объектом.
Таким образом, мои данные находятся в текстовом файле, и я хочу вывести их в следующем формате:
100 '\t' 150
200 '\t' 350
300 '\t' 370
Т.е. строки данных для переменных A, B и C сведены в таблицу, так что я могу экспортировать их в графический инструментарий (возможно, Origin Pro).
Это код, который я придумал до сих пор:
with open("example.txt", 'r') as file:
for line in file.readlines():
line = line.replace(' ', '\n')
line = line.split(':', 1)[-1]
print line
Это преобразует данные в следующее:
100
B:200
C:300
150
B:350
C:370
Поскольку.split(), очевидно, выполняется только в каждой строке перед использованием.replace() для добавления новых строк между данными. Я чувствую, что после того, как я использую.replace(), мне нужно снова начать цикл по строкам для повторного выполнения.split() или даже просто строки [2:], чтобы удалить имена ведущих переменных - но тогда я не могу думать как я собираюсь табулировать данные также для каждой строки для создания столбцов?
Есть идеи? Спасибо!
3 ответа
Очевидно, вам нужна некоторая структура данных для хранения значений ваших переменных. Наиболее подходящим является словарь списков:
d = {'A': [], 'B': [], 'C': []}
Затем вы просматриваете файл, разбивая каждую строку на элементы "Имя: значение", а затем разбивая эти элементы на :
подписывать и хранить значения соответствующим образом:
with open("example.txt", 'r') as file:
for line in file:
elements = line.rstrip().split()
for e in elements:
(name, value) = e.split(':')
d[name].append(value)
и, наконец, вы выводите свои данные, по одной переменной на строку:
for k in sorted(d):
print('\t'.join(d[k]))
Я предлагаю использовать pandas
библиотека:
import pandas as pd
df = pd.read_csv(path_to_infile, sep=' ', header=None, names=['A', 'B', 'C'])
df = df.applymap(lambda x: int(x[2:]))
df.to_csv(path_to_outfile, sep='\t', header=False, index=False)
После Вас import pandas
ты можешь использовать read_csv
функция для загрузки файла в фрейм данных с некоторыми дополнительными аргументами, такими как:
sep
который используется для объявления разделителяheader
это может использоваться, чтобы указать, что у вас нет имен столбцовnames
который используется для присвоения имен столбцам
После этого вы можете использовать applymap
Функция на весь фрейм данных для удаления имен переменных и двоеточий.
Наконец, вы можете использовать to_csv
способ сохранить файл в нужном месте, снова без header
но на этот раз без index
также, потому что это добавит столбец индекса по умолчанию.
Как видите, вы снова можете использовать sep
аргумент для объявления нового разделителя.
Вы можете сделать это, используя панд, что делает это действительно легко:
import pandas as pd
df = pd.read_csv(file_path,sep=' ',header=None,names = ['A','B','C'])
output = df.apply(lambda x:x[.str.replace('^([A-Z]:)','')],axis=1).T
output.to_csv(file_path,sep='\t',header = False, index = False)
документация: