Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 30, 2017 06:18:28

KsenZ
Зарегистрирован: 2016-11-07
Сообщения: 11
Репутация: +  1  -
Профиль   Отправить e-mail  

Форматирование строк в файле

Доброго времени дня.
Понадобилось при создании файла, форматировать каждую строку. Что бы улучшить читаемость файла.
Немного подробней. Необходимо при записи строк в файл, форматировать их так, что бы у каждой строки была фиксированная ширина, и “слова” и переменные начинались с заранее определенных мест.
Вот пример файла:

--------------------------------------------------
name1 : val1
--------------------------------------------------
name2 : val2
--------------------------------------------------
name3 : val3
--------------------------------------------------
Тут, ширина строки 50 символов. “Слова” (name1, name2, etc.) начинаются с 3 символа строки. Символ “:” стоит на 15 “месте”, затем через пробел идут значения переменных, которые всегда различаются по длине.

Собственно вопрос. Как такое можно реализовать?. Точнее, как такое реализовать элегантно?
Я вижу два пути:
1. Делать .format() для каждой строки, вычисляя отступы, количество знаков и т.д.
 f.write("{:-<50}\n".format(''))
f.write("{:2}account{:5}: {}\n".format('', '', root_domain))
f.write("{:-<50}\n".format(''))
2. Сделать некий файл-шаблон, с нужной разметкой. В нем заменять val1, val2 и т.д. на требуемые значения, а получившееся сохранять в файл с другим именем.

Может есть идеи как это реализовать по другому?

Отредактировано KsenZ (Ноя. 30, 2017 06:23:44)

Офлайн

#2 Ноя. 30, 2017 07:48:52

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Форматирование строк в файле

KsenZ
Путь истинного джедая - нагуглить готовое решение. Что-нибудь типа https://code.google.com/archive/p/prettytable/wikis/Tutorial.wiki. Наверняка не вы первый, кто форматирует логи.



Офлайн

#3 Ноя. 30, 2017 08:09:09

KsenZ
Зарегистрирован: 2016-11-07
Сообщения: 11
Репутация: +  1  -
Профиль   Отправить e-mail  

Форматирование строк в файле

FishHook
Путь истинного джедая - нагуглить готовое решение
это было первое, чем я начал заниматься.
FishHook
Наверняка не вы первый, кто форматирует логи.
это не совсем то, что мне необходимо, не таблица…

Я тут подумал, и понял, что немного перемудрил.
Еще раз все пересмотрев, понял, что способ номер 1, предложенный мной в первом посте, вполне себе нормальный. Изначально, меня смутил факт того, что нужно было вычислять количество знаков, отступов, но это, как оказалось, не такая и проблема. Дело в том, что name1, name2 etc. не меняются от файла к файлу, меняются только val1, val2… Т.е. вычислив 1 раз, сколько нужно отступов, до начала val, по сути и будет, то, что мне нужно.

Спасибо, что обратили внимание на мой вопрос.

Офлайн

#4 Ноя. 30, 2017 08:38:59

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Форматирование строк в файле

KsenZ
Что бы улучшить читаемость файла.
Частное решение может быть как у вас.
FishHook
Путь истинного джедая

Настоящие джедаи предполагают что переамбула может начать меняться, что большая часть фонтов не моноширинные, следовательно учет количества букв вам не поможет и т.д. и т.п.

Поэтому джедаи генерируют файл с данными отдельно а файл для визуального просмотра отдельно, мы например делаем латех документ который компилируется в pdf,dvi или подобные форматы.

Если хочется совместить возможность просмотра данных в текстовом редакторе и возможность их машинного чтения то добавлять разметку отсебятину очень плохая идея. Есть текстовые форматы специально созданные так чтобы они легко читались человеком, например yaml. Пользуйтесь средствами форматирования которые там предусмотрены. Если их недостаточно, то похоже ваш вкус не совпадает со вкусами большинства людей. Вам надо задуматься нужно ли то что вы хотите. И если вы настоящий джедай то добавите нужные средства в фок выбранной вами библиотеки. Анализируя частоту ее скачивания вы сможете понять насколько нужны ваши изменения людям. :):):)




Офлайн

#5 Ноя. 30, 2017 09:06:32

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10003
Репутация: +  857  -
Профиль   Отправить e-mail  

Форматирование строк в файле

  
>>> def make_formated_data(data, widths):
...     fmt = ' : '.join('{{:>{0}}}'.format(i) for i in widths)
...     out = '\n'.join(fmt.format(*i) for i in data)
...     return out
... 
>>> def get_max_field_widths(lst):
...     return (max(map(len, (r[i] for r in lst)))
...             for i in range(len(lst[0])))
... 
>>> lst = [['name1', 'val1__', 'val11'],
...        ['name2_______', 'val2', 'val22'],
...        ['name3', 'val3', 'val33_____'],
...        ['name4', 'val4', 'val44']]
>>> 
>>> formated_data = make_formated_data(lst, get_max_field_widths(lst))
>>> print(formated_data)
       name1 : val1__ :      val11
name2_______ :   val2 :      val22
       name3 :   val3 : val33_____
       name4 :   val4 :      val44
>>>



Офлайн

#6 Ноя. 30, 2017 09:15:34

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Форматирование строк в файле

doza_and
Поэтому джедаи генерируют файл с данными отдельно а файл для визуального просмотра отдельно, мы например делаем латех документ который компилируется в pdf,dvi или подобные форматы.
В латех логи писать лишь мастеру Йоде мастерство доступно



Офлайн

#7 Ноя. 30, 2017 09:38:16

KsenZ
Зарегистрирован: 2016-11-07
Сообщения: 11
Репутация: +  1  -
Профиль   Отправить e-mail  

Форматирование строк в файле

doza_and
Все, что вы написали верно. У меня частный случай, и не думаю, что он будет интересен широкой публике.
py.user.next
Спасибо большое. Идея понятна.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version