Манипулирование файлами фиксированной ширины в Pandas

У меня есть файл фиксированной ширины в следующем формате:

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


person Deepesh Nair    schedule 18.10.2018    source источник
comment
я так не худею. Из документации: 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.2018
comment
Но в вашем случае, поскольку вам нужно извлечь значения из ранее импортированных полей, почему бы также не указать, какие это поля? При использовании colspecs у вас могут быть перекрывающиеся поля. Так, например, ColSpecs= [(0,16), (1,5), (4,10), (5,7)] вполне допустимо и создаст ваши подполя из первых 16 символов.   -  person ALollz    schedule 19.10.2018
comment
@ALollz: Спасибо за ответ. Да, я думаю, из-за лишних пробелов нет возможности сохранить исходную длину во время импорта.   -  person Deepesh Nair    schedule 20.10.2018