2016-11-22 9 views
1

У меня есть следующий фрагмент кода, который я пытаюсь запуститьпитона 3 не Concat байт Str для списка

import json 
import textProcess as tp 

review = open('../inres_review.json') 
vocabulary = open('../vocabulary.txt','w+') 
label = open('../label.txt','w+') 
data = open('../data.txt','w+') 

voc = [] 
revs = [] 
lab = [] 
dat = [] 
i=1 
for line in review: 
    jre = json.loads(line) 
    jstar = jre['stars'] 
    text = jre['text'] 
    lab.append(jstar) 
    ws = tp.removeStopPunc(text) 
    revs.append(ws) 
    voc += ws 
    i += 1 

for i in lab: 
    label.write(str(i)+"\n") 
print ("label created successfully!") 

voc = list(set(voc)) 
print (len(voc)) 
print (type(i)) 
for i in voc: 
    vocabulary.write(i.encode('UTF-8')+"\n") 
print ("Vocabulary created successfully!") 

for revid, rev in enumerate(revs): 
    dat.append({}) 
    for w in rev: 
     if w in voca: 
      k = voca.index(w)+1 
      if k not in dat[revid]: 
       dat[revid][k] = 1 
      else: 
       dat[revid][k] += 1 
print (len(revs)) 


for revid, rev in enumerate(dat): 
    for k,v in rev.iteritems(): 
     s = str(revid+1)+' '+str(k)+' '+str(v)+'\n' 
     data.write(s) 
print ("successfully create data") 


review.close() 
vocabulary.close() 
label.close() 
data.close() 

Однако, независимо от того, каких изменений я я реализую я получаю следующее ошибка. Кто-нибудь может указать, что здесь не так?

TypeError         Traceback (most recent call last) 
<ipython-input-18-21a3dc9eb8ad> in <module>() 
    33 print (type(i)) 
    34 for i in bvoca: 
---> 35   vocabulary.write(i.encode('UTF-8')+"\n") 
    36 print ("successfully create vocabulary!") 
    37 

TypeError: can't concat bytes to str 

Любая помощь приветствуется!

+0

вопросы выше были исправлены .. Однако, когда я запускаю мой код выглядит как последний блок кода не получается выполнить, потому что мой файл data.txt пуст, также вывод не печатает len (revs) и «успешно созданные данные». Любая идея, что это может быть? –

ответ

4

encode возвращает bytes, так что вам нужно преобразовать '\n' в bytes, а также:

i.encode('UTF-8') + b"\n"

+0

Спасибо! похоже, он исправил это. Но теперь появилась еще одна ошибка: ТипError: write() аргумент должен быть str, а не байтами –

+0

@NidhiSirohi использовать 'str (i.encode ('UTF-8') + b" \ n ")' вероятно Помогите. –

+0

Спасибо @TanmayaMeher, но я пробовал следующее: vocabulary = open ('../ vocabulary.txt', 'wb +'), и это сработало! :) –