2016-11-22 20 views
1

Ich habe folgende Stück Code, das ichPython 3 nicht Bytes verketten, um eine Liste auf 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() 

Allerdings laufen bin versucht, egal was ich Änderungen, die ich umsetzen erhalte ich die folgende Error. Kann jemand bitte darauf hinweisen, was hier falsch ist?

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 

Jede Hilfe wird geschätzt!

+0

Die oben genannten Probleme behoben wurden .. aber wenn ich meinen Code ausführen, sieht aus wie der letzte Block des Codes nicht ausgeführt werden, weil meine Datei data.txt leer ist, auch die Ausgabe druckt nicht len ​​(revs) und "erfolgreich erstellte Daten". Irgendeine Idee was das sein könnte? –

Antwort

4

encode kehrt bytes, so dass Sie '\n' zu bytes auch konvertieren müssen:

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

+0

Danke! sieht so aus, als hätte es repariert. Aber jetzt ist ein weiterer Fehler aufgetaucht: TypeError: write() Argument muss str sein, nicht Bytes –

+0

@ NidhiSirohi verwenden 'str (i.encode ('UTF-8') + b" \ n ")' wahrscheinlich Hilfe. –

+0

Danke @ TanmayaMeher, aber ich habe Folgendes versucht: vokabular = offen ('../ vocal.txt', 'wb +') und es hat funktioniert! :) –

Verwandte Themen