Перенаправить печать в Python: val = print (arg) для вывода смешанного итерируемого в файл - PullRequest
2 голосов
/ 19 марта 2010

Допустим, у меня есть невероятно вложенные итерируемые списки / словари. Я хотел бы напечатать их в файл как можно проще. Почему я не могу просто перенаправить печать в файл?

val = print(arg) получает ошибку синтаксиса.

Есть ли способ получить доступ к stdinput?

И почему печать занимает целую вечность с массивными нитями? Плохое программирование на моей стороне для вывода массивных строк, но быстрая отладка - и разве это не использование силы интерактивного приглашения?

Вероятно, есть и более простой способ, чем моя хватка. Имеет ли улей-разум ответ?

Ответы [ 5 ]

2 голосов
/ 19 марта 2010

Вы можете заглянуть в модуль logging Python.Возможно, это идеальное совпадение в этом случае.

1 голос
/ 19 марта 2010

Обычно вы не используете print для записи в файл (хотя технически это возможно). Для этого вы должны использовать файловый объект.

with open(filename, 'w') as f:
    f.write(repr(your_thingy))

Если print всегда выводит массивную строку, вероятно, это не ошибка print, а результат отображения всего этого на экране.

1 голос
/ 19 марта 2010

В Python 3.*, чтобы перенаправить один print вызов на открытый объект файла destination,

print(arg, file=destination)

В Python 2.*, где print - оператор, синтаксис -

print>>destination, arg

Я предполагаю, что вы используете 2.*, потому что при 3.* присваивание результата print не является синтаксической ошибкой (это просто бесполезно, поскольку этот результат None, но разрешен). В 2.* print это оператор , а не функция, поэтому приведенный вами фрагмент кода действительно является синтаксической ошибкой.

Я не уверен, что назначение должно означать. Если вы хотите перенаправить один или несколько операторов * (или вызовов) print, чтобы получить отформатированный результат в виде строки в памяти, вы можете установить для sys.stdout экземпляр StringIO (или cStringIO); но вы специально упоминаете «в файл», так что я действительно озадачен предполагаемым значением этого назначения. Уточните пожалуйста?

1 голос
/ 19 марта 2010

Видя, как вы используете print в качестве функции, документы говорят, что вы можете перенаправить в файл следующим образом:

print(arg, file=open('fname', 'w'))
0 голосов
/ 06 ноября 2010

Я пробовал оба примера безуспешно, используя python 2.7

Для начала я создал файл в C: \ goat.text с помощью блокнота

Далее я попробовал следующее

import sys

печать >> "C: \ goat.txt", "тест" ошибка AttributeError: у объекта 'str' нет атрибута 'write'

print ("test", file = open ('C: \ goat.txt', 'w'))

SyntaxError: ("нет подходящей альтернативы при вводе '='", ('C: \ Users \ mike \ AppData \ Local \ Temp \ sikuli-tmp5165417708161227735.py', 3, 18, 'print ("test", file = open (\ 'C: \\ goat.txt \', \ 'w \')) \ n '))

Я пробовал несколько вариантов и не могу решить это.

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