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

1

Я полный новичок в Python. Я попробовал много методов из ответов stackoverflow по этому вопросу, но ни один из них не работает в моем script.
У меня есть этот маленький script для использования, однако я не могу получить огромный результат .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
  • 2
    Если вы новичок в Python и тем более, что кажется, что вы занимаетесь НЛП, я бы порекомендовал вам сразу перейти на Python 3!
Теги:
text
parsing

4 ответа

4
Лучший ответ

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.

5

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

1

Используя 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()
0

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

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

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

#!/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 €

Ещё вопросы

Сообщество Overcoder
Наверх
Меню