записать элементы списка в файл - PullRequest
0 голосов
/ 01 июня 2018

Биграм это список, который выглядит как -

[('a', 'b'), ('b', 'b'), ('b', 'b'), ('b', 'c'), ('c', 'c'), ('c', 'c'), ('c', 'd'), ('d', 'd'), ('d', 'e')]

Теперь я пытаюсь записать каждый элемент, если список в виде отдельной строки в файле с этим кодом -

 bigram = list(nltk.bigrams(s.split()))
 outfile1.write("%s" % ''.join(ele) for ele in bigram)

но я получаю эту ошибку:

TypeError: аргумент write () должен быть str, а не генератором

Я хочу получить результат как в файле-

('a', 'b') 
('b', 'b')
('b', 'b')
('b', 'c')
('c', 'c')
......

Ответы [ 3 ]

0 голосов
/ 01 июня 2018

вы передаете генераторное понимание write, для которого нужны строки.

Если я правильно понимаю, вы хотите написать одно представление кортежа на строку.

Вы можете достичь этогос:

outfile1.write("".join('{}\n'.format(ele) for ele in bigram))

или

outfile1.writelines('{}\n'.format(ele) for ele in bigram)

вторая версия передает понимание генератора на writelines, что позволяет избежать создания большой строки в памяти перед записью в нее (и выглядит болеекак ваша попытка)

создает файл с таким содержанием:

('a', 'b')
('b', 'b')
('b', 'b')
('b', 'c')
('c', 'c')
('c', 'c')
('c', 'd')
('d', 'd')
('d', 'e')
0 голосов
/ 01 июня 2018

Это проблема приоритета оператора.

Вам нужно выражение, подобное этому:

("%s" % ''.join(ele)) for ele in bigram

Вместо этого вы интерпретируете его следующим образом, где часть в скобках действительногенератор:

"%s" % (''.join(ele) for ele in bigram)

Используйте явные скобки.

Обратите внимание, что ("%s" % ''.join(ele)) for ele in bigram сам по себе генератор.Вам нужно вызывать write для каждого элемента из него.

Если вы хотите записать каждую пару в отдельной строке, вы должны явно добавить разделители строк.Самым простым, на мой взгляд, является явный цикл:

for pair in bigram:
  outfile.write("(%s, %s)\n" % pair)
0 голосов
/ 01 июня 2018

Попробуйте это:

outfile1.writelines("{}\n".format(ele) for ele in bigram)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...