Я полный новичок в 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
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 позади вас. Следующий 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 €