2013-09-16 4 views
1

У меня возник вопрос о перенаправлении вывода экрана в один файл. Вот мой код, чтобы напечатать вывод на экран:написать вывод экрана в файл

for O,x,y,z,M,n in coordinate: 
    print(O,x,y,z,M,n) 

И вывод на экран выглядит следующим образом:

O 0 0 0 ! 1 
O 1 0 0 ! 2 
O 2 0 0 ! 3 

Так как я могу перенаправить все данные в одном файле и в том же формате, только как выход экрана. Потому что быстрее будет получать все данные, а не ждать завершения вывода экрана. Я попытался for point in coordinate: file.write(' '.join(str(s) for s in point)), но выходной файл стал:

O 0 0 0 ! 0O 1 0 0 ! 1O 2 0 0 ! 2O 3 0 0 ! 3O 4 0 0 ! 4O 5 0 0 ! 5O 6 0 0 ! 6O 
+0

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

+0

Отметьте этот ответ: http://stackoverflow.com/a/616686/5987 –

ответ

0

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

for coordset in coordinate: 
    for point in coordset: 
     file.write(point) 

Или, если вы хотите форматировать, вы можете использовать строку форматирования.

for coordset in coordinate: 
    file.write('%s,%s,%s,%s,%s,%s' % set) 

Вы можете пояснить свое сообщение, если я не понимаю.

+1

Обратите внимание, что 'set' является ключевым словом в python. Поэтому вам, возможно, придется подумать об изменении этого имени на что-то еще более подходящее для этого – smac89

1

Функция вызова file.write(*point) по существу принимает каждый элемент внутри списка point и изменяет вызов функции следующим образом: file.write(p1, p2, p3, p4, ...).

Однако file.write принимает только один аргумент - строку. Это означает, что вам нужно преобразовать список point в строку.

Это, вероятно, в конечном итоге выглядит так:

with open('substrate', 'w') as file: 
    for point in coordinate: 
     file.write(' '.join([str(p) for p in point]) 
1

Попробуйте

with open('substrate', 'wb') as file: 
    file.write('\n'.join(' '.join(str(p) for p in point)) for point in coordinate) 

Если вы задаетесь вопросом, почему wb? См this question

Если вы хотите, чтобы пойти с ответом Mark Ransom «s, я считаю, что это, как вы делаете это в коде:

from sys import stdout 
stdout.write('\n'.join(' '.join(str(p) for p in point)) for point in coordinate) 
+0

Я пробовал ваш код. Но мой выходной файл содержит только: s s s s s и т. Д. –

+0

@JianliCheng ОК, похоже, вы используете python 3. См. Код обновления – smac89

+0

Выходной файл по-прежнему не я ищу. В выходном файле n переходит к 10, затем 20,30,40 и т. Д., А не 1,2,3,4,5 ... Кроме того, как я могу сделать каждую строку в выходном файле, который занят только на одну точку, например: O 0 0 0! 1/n O 1 0 0!2/n –

2

Самый простой способ не делать это в Python, но пусть OS сделайте это за вас. Это работает как в Linux, так и в командной строке Windows.

python myprog.py >output.txt 
+0

Это, на мой взгляд, лучший способ справиться с этим, если, конечно, фактическая цель вашей программы - написать вывод в файлы. Тогда, вероятно, лучше обработать его в коде, иначе корректный запуск кода требует знания того, что вы должны запускать его так. – kniteli

+0

@kniteli Моя цель - перенаправить весь вывод экрана в один файл. Я новичок в питоне, и я весь день боролся с этой проблемой. –

Смежные вопросы