У меня есть файл фиксированной ширины в следующем формате:
5678223313570888271712000000024XAXX0101010006461801325345088800.0784001501.25abc@yahoo.com
5678223324686600271712000000070XAXX0101010006461801325390998280.0784001501.25abcde.12345@gmail.com 5678123422992299
Вот что я пробовал:
import pandas as pd
ColSpecs = [(0,16),(16,31),(31,44),(44,62),(62,70),(70,73),(73,77),(77,127),(127,143)]
df = pd.read_fwf("~/filename.txt",colspecs=ColSpecs,Header=True)
Теперь это, безусловно, помогает мне чисто конвертировать в формат Pandas. Однако пустые (или фиксированные пробелы) обрезаются. Например: поле электронной почты (#8) имеет фиксированный набор из 50 символов. Они усекаются, как только импортируются в фрейм данных Pandas.
Для обработки данных я создаю 3 новых поля, которые извлекаются из значений ранее импортированных полей.
Окончательная структура выходного файла:
[(0,16),(16,31),(31,44),(44,62),(62,70),(70,73),(73,77),(77,127),(127,143),(143,153),(153,163),(164,165)]
Поскольку я не нашел никакого метода to_fwf для фреймов данных или какой-либо другой альтернативы для Pandas -> Flat File (с сохранением исходной длины), я был бы очень признателен, если бы у кого-нибудь было лучшее решение.
P.S. : Я читал, что awk/sed в Unix работает лучше, но все же хотелось бы знать для Python
The parser will take care of extra white spaces around the columns so it’s ok to have extra separation between the columns in the file.
. И насколько я могу судить, нет простого способа удалить эту функциональность. - person ALollz   schedule 19.10.2018colspecs
у вас могут быть перекрывающиеся поля. Так, например,ColSpecs= [(0,16), (1,5), (4,10), (5,7)]
вполне допустимо и создаст ваши подполя из первых 16 символов. - person ALollz   schedule 19.10.2018