Предисловие. Я довольно новичок в Python, имея больше опыта на другом языке.Анализ текстового файла на python и вывод в CSV
У меня есть текстовый файл с одним списком столбцов, строк в родовом (но слегка варьируя) формат «./abc123a1/type/1ab2_x_data_type.file.type»
Мне нужно извлечь abc123a1 и 1ab2 части из всех нескольких сотен строк и помещают их под два столбца (столбцы a и b) в csv. Иногда может быть «1ab2_a» и «1ab2_b», но только хочу один 1ab2. Поэтому я хотел бы захватить «1ab2_a» и игнорировать все остальные.
У меня есть регулярное выражение, которое я думаю, что будет работать:
tmp = list()
if re.findall(re.compile(r'^([a-zA-Z0-9]{4})_'), x):
tmp = re.findall(re.compile(r'^([a-zA-Z0-9]{4})_'), x)
elif re.findall(re.compile(r'_([a-zA-Z0-9]{4})_'), x):
tmp = re.findall(re.compile(r'_([a-zA-Z0-9]{4})_'), x)
if len(tmp) == 0:
return None
elif len(tmp) > 1:
print "ERROR found multiple matches"
return "ERROR"
else:
return tmp[0].upper()
Я пытаюсь сделать этот шаг за шагом сценария и тестирования вещей, чтобы убедиться, что он работает, но это просто не так.
import sys
import csv
listOfData = []
with open(sys.argv[1]) as f:
print "yes"
for line in f:
print line
for line in f:
listOfData.append([line])
print listOfData
with open('extracted.csv', 'w') as out_file:
writer = csv.writer(out_file)
writer.writerow(('column a', 'column b'))
writer.writerows(listOfData)
print listOfData
Все еще не в состоянии получить что-либо в формате CSV, кроме заголовков столбцов, намного меньше разобран версия!
Есть ли у кого-нибудь лучшие идеи или форматы, в которых я мог бы это сделать? Друг упоминал о том, как смотреть в glob.glob, но мне не повезло, что это так работает.
Когда вы печатаете 'listOfData', это делает e данные, которые вы хотите? –
"* Так что я хочу захватить« 1ab2_a »и игнорировать все остальные. *« Не уверен, чтобы хорошо понять это предложение. Вы хотите извлечь '1ab2' или' 1ab2_a'? –
Не могли бы вы отредактировать вопрос, чтобы добавить еще несколько строк ввода? Также добавьте, какой будет ожидаемый результат для этого ввода. –