2015-03-09 7 views
0

Я пытаюсь создать файл журнала, который получает переменную информацию с помощью 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 A t конец кода, но это не даст мне переменную информацию во время каждого цикла. Это даст мне значение только в конце цикла. Короче, мне нужна переменная информация в каждом цикле (который имеет другую команду записи журнала), написанную в конце файла журнала.

+0

Вы могли бы написать на два отдельных файлов? –

+0

Мне нужен он в том же файле. –

+0

Это не представляется возможным, если вы не хотите переписать весь файл на каждую итерацию. Поскольку после первой итерации ваш файл будет выглядеть как «A1, globals (A1)», но затем вы хотите изменить его на «A1, A2, globals (A1), globals (A2)» и т. Д. Я правильно понимать? –

ответ

1

Простым способом сделать это было бы записать выходы в два отдельных текстовых файла, а затем объединить файлы в самом коде. Вы также можете выбрать порядок, в котором можно также объединить файлы, изменив файл журнала_файла. С вашего кода с использованием описанного выше метода:

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()