Позвольте мне сосредоточиться на вашем первом примере.Ваше регулярное выражение соответствует только первому слову в каждом поле, но давайте пока оставим его таким, поскольку я уверен, что вы легко можете это исправить.
Вы можете создать панд DataFrame
для хранения проанализированных данных,затем для каждой строки, в которой вы запускаете свое регулярное выражение, конвертируйте его в словарь и загружайте в панды Series
.Затем вы добавляете его в свой фрейм данных.Pandas достаточно умен, чтобы заполнить недостающие данные NaN
.
df = pd.DataFrame()
for l in lines:
matches = re.findall(r'(\w+) : (.*?) ', l, re.IGNORECASE)
s = pd.Series(dict(matches))
df = df.append(s, ignore_index=True)
>>> print(df)
Address City Country Email First Last Sex State Phone
0 Main San US j_doe@notvalid.gov John Doe male TX NaN
1 1496 KEMPNER US NaN Carolyn Wysong female TX 832-600-8133
Я не уверен, что необходим шаг dict
, возможно, есть способ pandas для прямого анализа вашего списка кортежей.
Затем вы можете легко преобразовать его в csv, при необходимости вы сохраните все свои столбцы с пустыми полями.
df.to_csv("result.csv", index=False)
>>> !cat result.csv
Address,City,Country,Email,First,Last,Sex,State,Phone
Main,San,US,j_doe@notvalid.gov,John,Doe,male,TX,
1496,KEMPNER,US,,Carolyn,Wysong,female,TX,832-600-8133
О работе с большими файлами, если вы заранее знаете все имена полей, вы можетеинициализируйте фрейм данных с аргументом columns
и запустите синтаксический анализ и csv, сохраняя один чанк за раз.В IIRC есть параметр mode
для to_csv
, который должен позволить вам добавить к существующему файлу.