Я пытаюсь изменить текстовый файл, но это нужно сделать очень много, поэтому я подумал, что буду использовать возможность научиться использовать python для редактирования текстовых файлов.
Текстовый файл, который у меня есть, выглядит примерно так:
title1
title2
...
title5
var1 var2 var3 var4 var5
var1.1 var2.1 var3.1 var4.1 var5.1
Так далее и тому подобное. Заголовки могут быть от 5 до 18, а количество титров = количество столбцов для строк с переменными.
Переменные строки могут попасть в сотни тысяч.
Мне нужно в основном добавить один заголовок (константу), а затем на каждую строку, мне нужно добавить дополнительный столбец, который зависит от числа где-то в var1 (строка) этой строки.
Является ли панда правильной вещью для использования здесь? В настоящее время, когда я просто импортирую его с помощью read_table, мне не нравится добавление информации о разделителе, которую я предполагаю, потому что исходные строки - это всего лишь одна вещь.
Все советы будут высоко оценены.
Большое спасибо
Вы можете сделать это с чистым Python. В этом примере я сначала разбираю строку (можно читать из файла) в структуры Python, делаю желаемую операцию (добавляю один заголовок, добавляем столбец в строку на основе первого элемента в этой строке) и записываем значения обратно:
data = """
title1
title2
title3
title4
title5
var1 var2 var3 var4 var5
var1.1 var2.1 var3.1 var4.1 var5.1
"""
import re
# parse string to Python structures:
titles = re.findall(r'^(\w+)$', data, flags=re.M)
rows = []
for row in re.finditer(r'^.*? .*?$', data, flags=re.M):
rows.append([])
for values in re.finditer(r'[\w\.]+', row[0]):
rows[-1].append(values[0])
# add title:
titles.append('NEWTITLE')
# add value to all rows (some example operation with column 0):
for row in rows:
row.append('NEW' + row[0])
# print values back to old form:
for title in titles:
print(title)
for row in rows:
print(' '.join(row))
Выходы:
title1
title2
title3
title4
title5
NEWTITLE
var1 var2 var3 var4 var5 NEWvar1
var1.1 var2.1 var3.1 var4.1 var5.1 NEWvar1.1
f = open('my_data.txt', 'r')
и читаете его с помощью f.read()