Если вы открыты для использования пакетов, plyr
является очень популярным и имеет эту удобную функцию mapvalues () , которая сделает именно то, что вы ищете:
foo <- mapvalues(foo, from=c("AA", "AC", "AG"), to=c("0101", "0102", "0103"))
Обратите внимание, что он работает для типов данных всех видов, а не только для строк.
Вы должны реализовать встроенный модуль csv
, который входит в стандартную комплектацию Python. Он может легко разбирать каждую строку в списке. Попробуйте что-то вроде этого:
import csv
with open('text.txt', 'r') as file:
my_reader = csv.reader(file, delimiter='|')
for row in my_reader:
if row[0] == 'C00501197':
print(row)
Это должно вывести строки, которые вы хотите. Затем вы можете делать все, что хотите, чтобы обработать их и сохранить их снова.
Не используйте регулярные выражения, если вы можете избежать этого. csv
- хороший выбор, или используйте простое манипулирование строками.
ans = []
with open('data.txt') as rf:
for line in rf:
line = line.strip()
if line.startswith("C00501197"):
ans.append(line)
with open('extracted_data.txt', 'w') as wf:
for line in ans:
wf.write(line)
Ваш выходной код также был немного сбит с толку - всегда записывал последнюю строку в файле, а не выбранные записи.
Вам не нужно проходить через регулярные выражения, просто разбейте строку на основе разделителя и проверьте интересующее вас n-е поле:
found_lines = []
with open("data.txt", 'r') as rf:
for line_file in rf:
line = line_file.split("|")
if line[0] == "C00501197" :
found_lines.append( line )
with open('extracted_data.txt','w') as wf:
for found_line in found_lines :
wf.write("|".join(map(str,found_line)))
Это должно сработать.