Как распечатать глобальные () в цикле (который имеет другую команду записи журнала) в конце файла?
Я пытаюсь создать файл журнала, который получает переменную информацию с помощью pprint globals() и записывает в файл. Но поскольку мне приходится использовать много циклов, есть ли способ поместить все выходные данные pprint globals() во время каждого цикла в конец файла журнала для кода, показанного ниже:
import numpy as np
from pprint import pprint
A = np.array([1, 2, 3, 4])
f = open("log.txt", 'w')
n = 3
for i in range(n):
f.write(u'\u27A4 - %s\n'.encode('utf-8') % str(i))
A = A + 1
f.writelines(list(u' \u27B3 - %s\n'.encode('utf-8') % i for i in A))
pprint(globals(), f)
f.close()
Выход
➤ - 0
➳ - 2
➳ - 3
➳ - 4
➳ - 5
{'A': array([2, 3, 4, 5]),
'__builtins__': <module '__builtin__' (built-in)>,
'__doc__': None,
'__file__': '~/Stack exchange/pprint_global.py',
'__name__': '__main__',
'__package__': None,
'f': <open file 'log.txt', mode 'w' at 0xb66588b8>,
'i': 0,
'n': 2,
'np': <module 'numpy' from '/usr/lib/python2.7/dist-packages/numpy/__init__.pyc'>,
'pprint': <function pprint at 0xb6e2748c>}
➤ - 1
➳ - 3
➳ - 4
➳ - 5
➳ - 6
{'A': array([3, 4, 5, 6]),
'__builtins__': <module '__builtin__' (built-in)>,
'__doc__': None,
'__file__': '~/Stack exchange/pprint_global.py',
'__name__': '__main__',
'__package__': None,
'f': <open file 'log.txt', mode 'w' at 0xb66588b8>,
'i': 1,
'n': 2,
'np': <module 'numpy' from '/usr/lib/python2.7/dist-packages/numpy/__init__.pyc'>,
'pprint': <function pprint at 0xb6e2748c>}
Желаемый вывод
➤ - 0
➳ - 2
➳ - 3
➳ - 4
➳ - 5
➤ - 1
➳ - 3
➳ - 4
➳ - 5
➳ - 6
{'A': array([2, 3, 4, 5]),
'__builtins__': <module '__builtin__' (built-in)>,
'__doc__': None,
'__file__': '~/Stack exchange/pprint_global.py',
'__name__': '__main__',
'__package__': None,
'f': <open file 'log.txt', mode 'w' at 0xb66588b8>,
'i': 0,
'n': 2,
'np': <module 'numpy' from '/usr/lib/python2.7/dist-packages/numpy/__init__.pyc'>,
'pprint': <function pprint at 0xb6e2748c>}
{'A': array([3, 4, 5, 6]),
'__builtins__': <module '__builtin__' (built-in)>,
'__doc__': None,
'__file__': '~/Stack exchange/pprint_global.py',
'__name__': '__main__',
'__package__': None,
'f': <open file 'log.txt', mode 'w' at 0xb66588b8>,
'i': 1,
'n': 2,
'np': <module 'numpy' from '/usr/lib/python2.7/dist-packages/numpy/__init__.pyc'>,
'pprint': <function pprint at 0xb6e2748c>}
Первое впечатление - поместить команду pprint в конец кода, но это не даст мне информацию о переменной во время каждого цикла. Это даст мне значение только в конце цикла. Короче говоря, мне нужна переменная информация в каждом цикле (в котором есть другая команда записи журнала), записанная в конец файла журнала.
1 ответ
Простой способ сделать это - записать выходные данные в два отдельных текстовых файла, а затем объединить файлы в самом коде. Вы также можете выбрать порядок объединения файлов, изменив log_file_list. С вашим кодом, используя вышеуказанный метод:
import numpy as np
from pprint import pprint
A = np.array([1, 2, 3, 4])
f1 = open("log1.txt", 'w')
f2 = open("log2.txt", 'w')
n = 2
for i in range(n):
f1.write(u'\u27A4 - %s\n'.encode('utf-8') % str(i))
A = A + 1
f1.writelines(list(u' \u27B3 - %s\n'.encode('utf-8') % i for i in A))
pprint(globals(), f2)
f1.close()
f2.close()
log_file_list = ['log1.txt', 'log2.txt']
with open('log.txt', 'w') as output_file:
for log_file in log_file_list:
with open(log_file) as input_file:
for line in input_file:
output_file.write(line)
output_file.write('\n')
Альтернативный метод
Альтернативный код, который не использует строки:
import numpy as np
from pprint import pprint
A = np.array([1, 2, 3, 4])
f1 = open("log1.txt", 'w')
f2 = open("log2.txt", 'w')
n = 2
for i in range(n):
f1.write(u'\u27A4 - %s\n'.encode('utf-8') % str(i))
A = A + 1
f1.writelines(list(u' \u27B3 - %s\n'.encode('utf-8') % i for i in A))
pprint(globals(), f2)
f1.close()
f2.close()
f1 = open("log1.txt", 'r')
f2 = open("log2.txt", 'r')
f = open("log.txt", 'w')
f.write(f1.read())
f.write(f2.read())
f.close()