Python3 - Класс и результаты моделирования в текстовом формате. файл - PullRequest
0 голосов
/ 06 июля 2018

Я недавно работаю с Python3 и не могу понять, как сохранить свои выводы в файл. Из других обсуждений я знаю, что вы можете сделать:

f = open(filename, 'w') 
print('whatever', file = f)

но в моем случае выходные данные, которые я хочу сохранить, не записываются в «печать». Как вы можете видеть ниже, я вызываю класс "TruieGest" в другом файле, чтобы запустить симуляцию для моих разных животных (свиноматок ['ID']):

def simulation():
  for sows['ID'] in sows['ID']:
    SowGest = TruieGest(sows['ID'], sows['Age'], sows['Portee'])
    SowGest.data_lactation()
    return simulation

simulation()
sorties.close()

Есть идеи о том, как я могу получить свои выводы в файл?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Допустим, вы используете интерактивное приглашение Python и используете модуль, который вы не можете полностью контролировать / переписывать, выводя результаты прямо на экран.

Если вам нужно сохранить в файл некоторые из этих выходных данных (возможно, вы хотите просмотреть результаты в интерактивном режиме и поиграть с некоторыми параметрами перед передачей результатов в файл), вы можете сделать следующее

15:14 boffi@debian:~ $ python
Python 3.6.5 |Anaconda, Inc.| (default, Apr 29 2018, 16:14:56) 
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> def f(): print('Hi Charlotte!')
>>> f()
Hi Charlotte!
>>> with open('a_file.txt', 'w') as sys.stdout:
...     f()

Как вы можете видеть (если вы попробуете мой код ...), второй вызов функции ничего не печатает, и мы можем видеть содержимое a_file.txt из оболочки

15:16 boffi@debian:~ $ cat a_file.txt 
Hi Charlotte!

Полагаю, это то, что тебе нужно.

И если вы хотите знать, как это работает ... Сначала вы import sys, это стандартный модуль библиотеки, взаимодействующий с системой, и когда вы хотите зафиксировать вывод метода, вы временно переназначить (с помощью оператора with) стандартный поток вывода (sys.stdout) на объект файла. Все операторы, которые следуют в блоке с отступом with (технически диспетчер контекста ), будут печататься не на терминале, а в файле. Еще одна неприятность, когда вы изменяете свой код 1. , файл автоматически закрывается и 2. print подключаются заново с терминалом.

PS Если вы хотите добавить разные сегменты вывода в один файл, вы можете. Прочтите о функции open, которая может открыть существующий файл в режиме append .

0 голосов
/ 06 июля 2018

Вы должны использовать f.writeline() или f.write().

О линии

TruieGest(sows['ID'], sows['Age'], sows['Portee'])

Я полагаю, что проще всего было бы преобразовать это в String, но, возможно, описанные выше методы обрабатывают dict или списки.

(извините, не могу сейчас это проверить)

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