Я хотел бы создать строковый буфер для большой обработки, форматирования и, наконец, записи буфера в текстовый файл, используя функциональность C-стиля sprintf
в Python. Из-за условных операторов я не могу записать их прямо в файл.
например псевдокод:
sprintf(buf,"A = %d\n , B= %s\n",A,B)
/* some processing */
sprint(buf,"C=%d\n",c)
....
...
fprintf(file,buf)
Итак, в выходном файле у нас есть такой o / p:
A= foo B= bar
C= ded
etc...
Изменить, чтобы прояснить мой вопрос:
buf
большой буфер содержит все эти строки, отформатированные с помощью sprintf. Если следовать вашим примерам, они buf
будут содержать только текущие значения, а не старые. например, первое, что buf
я написал A= something ,B= something
позже, C= something
было добавлено таким же образом buf
, но в ваших ответах Python buf
содержится только последнее значение, которого я не хочу - я хочу buf
иметь все, что printf
я делал с самого начала, например, в C
.
buf
, а не в конец.) Вероятно, лучше всего было бы использовать массив строк, а затем объединить их вместе, прежде чем записывать в файл.def sprintf(buf, fmt, *args): ...
Ответы:
В Python есть
%
для этого оператор.См. Этот справочник для всех поддерживаемых спецификаторов формата.
Вы также можете использовать
format
:источник
Если я правильно понял ваш вопрос, вы ищете format () вместе с его мини-языком .
Глупый пример для Python 2.7 и выше:
Для более ранних версий python: (проверено с 2.6.2)
источник
"{0} ...\r\n {1}!".format("Hello", "world")
Я не совсем уверен, что понимаю вашу цель, но вы можете использовать
StringIO
экземпляр в качестве буфера:В отличие от этого
sprintf
, вы просто передаете строкуbuf.write
, форматируя ее с помощью%
оператора илиformat
метода строк.Конечно, вы можете определить функцию для получения
sprintf
интерфейса, на который вы надеетесь:который можно было бы использовать так:
источник
io.StringIO()
вместо этогоИспользуйте оператор форматирования
%
:источник
Вы можете использовать форматирование строк:
Но это удалено в Python 3, вы должны использовать "str.format ()":
источник
format()
может быть предпочтительнее, но%
форматирование все еще существует. (См. Mail.python.org/pipermail/python-dev/2009-September/092399.html, почему он не устарел)Чтобы вставить в очень длинную строку, лучше использовать имена для различных аргументов, вместо того, чтобы надеяться, что они находятся в правильных позициях. Это также упрощает замену нескольких повторов.
Взято из примеров формата , где
Format
также показаны все другие ответы.источник
Это, вероятно, самый близкий перевод вашего кода C в код Python.
%
Оператор в Python делает почти то же самое , как C - хsprintf
. Вы также можете напрямую распечатать строку в файл. Если задействовано много таких строковых форматированных строк, было бы целесообразно использоватьStringIO
объект для ускорения времени обработки.Поэтому вместо этого
+=
сделайте следующее:источник
Если вам нужно что-то вроде функции печати python3, но в строке:
или без
'\n'
конца:источник
Что-то вроде...
источник
Взгляните на «Интерполяцию буквальных строк» https://www.python.org/dev/peps/pep-0498/
Я нашел его через http://www.malemburg.com/
источник
Два подхода: запись в строковый буфер или запись строк в список и последующее присоединение к ним. Я думаю, что этот
StringIO
подход более питонический, но он не работал до Python 2.6.Вы также можете использовать их без
ContextMananger
(s = StringIO()
). В настоящее время я использую класс диспетчера контекста сprint
функцией. Этот фрагмент может быть полезен для вставки требований отладки или нечетного разбиения на страницы:источник