Я пробовал (4 часа потратил чтение документов, googling, ...), и это должен быть мой мозг, поэтому я был бы признателен за любой нежный толчок или правильный удар в правильном направлении:Обработка регулярных выражений CSV-записей в python
Получил .csv
файл, который мне нужно обрабатывать: только сохранить определенные регулярные выражения, совпадающие строки (RE является ^[A-Z][A-Z];.*15%;
), а затем распечатать конкретные столбцы (скажем, 1, 2, 13, 15 и 17). Очень легко в оболочке (grep, awk), невозможно (для меня) в python.
Это код, который я придумал до сих пор:
import re
import csv
src="/Users/username/file.csv"
reg="^[A-Z][A-Z];.*15%;"
with open(src, "r") as file:
for line in file:
line=line.strip()
match = re.match(reg,line.strip())
if match:
vat=csv.reader(line, delimiter=';')
for r in vat:
print r[0]
Вопреки моему убеждению, модуль CSV разбирает каждый символ в виде записи, а не всей линии, следовательно, выход не поле [0] массив, но 1 символ.
Если добавить строку после печати, если матч
if match:
print line
строки печатаются правильно, значит, моя путаница - почему csv.reader не относиться к ним как таковой?
Ожидая услышать ваши мысли - зная питона, решение очень просто ;-)
PS: бонусные баллы, если RE соответствия могут быть сделаны на отдельных колонках, я. е. только технологическая линия, если столбец 1 соответствует [AZ] [AZ], игнорируя случай и колонка 17 матчей 15% - то печатные столбцы 1, 2, 13, 15 и 17.
'csv.reader' перебирать объект, который вы ему даете, а затем разбить на список строк. Вы кормите csv.reader линией вместо файла. Когда вы перебираете строку (которая является строкой), вы получаете символы как _records_, когда вы перебираете файл, вы получаете строки. –