Добавить столбцы определенного размера, используя Python 3.x - PullRequest
1 голос
/ 12 марта 2019

Есть ли способ добавить новые записи в файл, где каждое поле занимает определенный размер, используя python? Как показано на рисунке ниже, есть вместе 8 столбцов [column number:column bytes] ->[1:20,2:10,3:10,4:39, 6:2, 7:7,8:7] каждый разного размера. Например, если значение первого столбца составляет 20 байтов «ABBSBABBSBT», оно может содержать 10,5 или может занимать целые 20 байтов в зависимости от пользовательского ввода. На языке Си мы можем указать размер байта во время инициализации переменной. Как добавить новую запись с правильным фиксированным интервалом для каждого столбца?

enter image description here

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 12 марта 2019

Для этого вы также можете использовать литералы f-строки , которые доступны с Python3.6.

Вы можете написать f-строку как

out_str = f"{col1:20}{col2:10}{col3:39}{col4:2}{col5:1}{col6:2}{col7:7}{col8:7}")

в файл.

col1, col1, col1 и т. Д. Являются переменными, имеющими значение столбцов.Подставьте имена переменных.

Число после : - это ширина, на которой должно быть напечатано значение.По умолчанию это выравнивание по левому краю.

Например:

col1="MEGAXXXX"
col2="CO415"
col3="WWE42AWE42AWE42AWE42AE42A"
col4="Z"
col5="1"
col6="M"
col7="4j4241"
col8="234"

print(f"{col1:20}{col2:10}{col3:39}{col4:2}{col5:1}{col6:2}{col7:7}{col8:7}")

даст

MEGAXXXX            CO415     WWE42AWE42AWE42AWE42AE42A              Z 1M 4j4241 234   

Это также может помочь.

0 голосов
/ 12 марта 2019

Вы можете использовать синтаксис Python для форматирования строки перед добавлением в файл . Что-то вроде:

line_format = '{:20}{:10}{:10}{:39}{:2}{:7}{:7}\n'

with open('existing_file', 'a') as f:
    f.write(line_format.format('ABBSBABBSBT', 'JP000', 'XYZABC', 'JPJPYJAP', 0, 'YYSGB', '00NABCD'))

Вы можете использовать указанный выше синтаксис для указания максимальной ширины и выравнивания, а также многих других полезных опций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...