Перенаправление вывода печати в файл .txt в Python

Я полный новичок в Python. Я пробовал много методов из ответов stackoverflow по этому вопросу, но ни один из них не работает в моем скрипте.
У меня есть этот маленький скрипт для использования, однако я не могу получить огромный результат .txt-файла, чтобы я мог анализировать данные. Как перенаправить вывод печати в txt-файл на моем компьютере?

from nltk.util import ngrams import collections with open("text.txt", "rU") as f: sixgrams = ngrams(f.read().decode('utf8').split(), 2) result = collections.Counter(sixgrams) print result for item, count in sorted(result.iteritems()): if count >= 2: print " ".join(item).encode('utf8'), count 

print в Python 2.x перенаправление поддержки ( >> fileobj ):

 ... with open('output.txt', 'w') as f: print >>f, result for item, count in sorted(result.iteritems()): if count >= 2: print >>f, " ".join(item).encode('utf8'), count 

В Python 3.x функция print принимает необязательный file параметров ключевого слова:

 print("....", file=f) 

Если вы делаете from __future__ import print_function в Python 2.6+, выше подход возможен даже в Python 2.x.

Просто сделайте это в командной строке: python script.py > text.txt

Используя BufferedWriter, вы можете сделать это так

 os = io.BufferedWriter(io.FileIO(pathOut, "wb")) os.write( result+"\n") for item, count in sorted(result.iteritems()): if count >= 2: os.write(" ".join(item).encode('utf8')+ str(count)+"\n") outs.flush() outs.close() 

Как упоминал Антти, вы должны предпочесть python3 и оставить весь этот раздражающий python2 мусор позади вас. Следующий скрипт работает с python2 и python3.

Для чтения / записи файлов используйте функцию open из модуля io , это совместимо с python2 / python3. Чтобы открыть ресурс, например файл, используйте All with stat. Параметр with используется для обертывания выполнения блока в Python Context Manager . Файловые дескрипторы имеют контекстный манифест реализации и будут автоматически закрыты при выходе из блока.

Не зависеть от python, если вы хотите прочитать текстовый файл, вы должны знать кодировку этого файла, чтобы прочитать его правильно (если вы не уверены, сначала попробуйте utf-8 ). Кроме того, правильная сигнатура UTF-8 является utf-8 и режим U лишен.

 #!/usr/bin/env python # -*- coding: utf-8; mode: python -*- from nltk.util import ngrams import collections import io, sys def main(inFile, outFile): with io.open(inFile, encoding="utf-8") as i: sixgrams = ngrams(i.read().split(), 2) result = collections.Counter(sixgrams) templ = "%-10s %s\n" with io.open(outFile, "w", encoding="utf-8") as o: o.write(templ % (u"count", u"words")) o.write(templ % (u"-" * 10, u"-" * 30)) # Sorting might be expensive. Before sort, filter items you don't want # to handle, btw. place *count* in front of the tuple. filtered = [ (c, w) for w, c in result.items() if c > 1] filtered.sort(reverse=True) for count, item in filtered: o.write(templ % (count, " ".join(item))) if __name__ == '__main__': sys.exit(main("text.txt", "out_text.txt")) 

С входным файлом text.txt :

 At eight o'clock on Thursday morning and Arthur didn't feel very good he missed 100 € on Thursday morning. The Euro symbol of 100 € is here to test the encoding of non ASCII characters, because encoding errors do occur only on Thursday morning. 

Я получаю следующий output_text :

 count words ---------- ------------------------------ 3 on Thursday 2 Thursday morning. 2 100 €