Можно ли в Python записать вывод генератора (context_diff) в текстовый файл? - PullRequest
0 голосов
/ 07 июля 2011

Метод difflib.context_diff возвращает генератор, показывающий различные строки 2 сравниваемых строк. Как я могу записать результат (сравнение) в текстовый файл?

В этом примере кода, я хочу, чтобы все от строки 4 до конца в текстовом файле.

>>> s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n']
>>> s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n']
>>> for line in context_diff(s1, s2, fromfile='before.py', tofile='after.py'):
...     sys.stdout.write(line)  # doctest: +NORMALIZE_WHITESPACE
*** before.py
--- after.py
***************
*** 1,4 ****
! bacon
! eggs
! ham
  guido
--- 1,4 ----
! python
! eggy
! hamster
  guido

Заранее спасибо!

Ответы [ 2 ]

9 голосов
/ 07 июля 2011
with open(..., "w") as output:
    diff = context_diff(...)
    output.writelines(diff)

См. Документацию для file.writelines().

Объяснение:

  1. with - менеджер контекста: он обрабатываетзакрытие файла, когда вы закончите.В этом нет необходимости, но это хорошая практика - вы также можете сделать

    output = open(..., "w")
    

    , а затем либо позвонить output.close(), либо позволить Python сделать это за вас (когда менеджер памяти собирает output).

  2. "w" означает, что вы открываете файл в режиме записи, а не "r" (чтение, по умолчанию).Существуют и другие варианты, которые вы можете указать здесь (+ для добавления, b для двоичного iirc).

  3. writelines принимает любые повторяющиеся строки и записывает их в файлобъект, по одному за раз.Это то же самое, что и for line in diff: output.write(line), но точнее, потому что итерация неявная.

0 голосов
/ 07 июля 2011
f = open(filepath, 'w')
for line in context_diff(s1, s2, fromfile='before.py', tofile='after.py'):
    f.write("%s\n" %line)

f.close()
...