2017-02-27 1 views
0

Je veux écrire le résultat de la jointure par deux dans le fichier txt.bz2 (le nom du fichier est nommé par le code, n'existe pas au début). comme le formulaire suivant dans le fichier txt.Python3: écrire une chaîne dans le fichier .txt.bz2

1 a,b,c 
0 d,f,g 
....... 

Mais il y a une erreur. Mon code suit, s'il vous plaît donnez-moi des conseils pour y faire face. Merci!

importation bz2

x = ['a b c', 'd f g', 'h i k', 'k j l'] 
y = [1, 0, 0, 1] 

with bz2.BZ2File("data/result_small.txt.bz2", "w") as bz_file: 
    for i in range(len(y)): 
     m = ','.join(x[i].split(' ')) 
     n = str(y[i])+'\t'+m 
     bz_file.write(n) 

erreur:

compressed = self._compressor.compress(data) 
TypeError: a bytes-like object is required, not 'str' 

Répondre

0

Ouvrez le fichier en mode texte:

import bz2 

x = ['a b c', 'd f g', 'h i k', 'k j l'] 
y = [1, 0, 0, 1] 

with bz2.open("data/result_small.txt.bz2", "wt") as bz_file: 
    for i in range(len(y)): 
     m = ','.join(x[i].split(' ')) 
     n = str(y[i]) + '\t' + m 
     bz_file.write(n + '\n') 

Plus succinctement:

import bz2 

x = ['a b c', 'd f g', 'h i k', 'k j l'] 
y = [1, 0, 0, 1] 

with bz2.open("data/result_small.txt.bz2", "wt") as bz_file: 
    for a, b in zip(x, y): 
     bz_file.write('{}\t{}\n'.format(b, ','.join(a.split()))) 
1

Vous ouvrez un fichier bz2 en utilisant le fichier bz2.BZ2File(path).

with bz2.BZ2File("data/result_small.txt.bz2", "rt") as bz_file: 
    #... 
+0

mais il y a erreur: soulever ValueError ("Mode non valide:% r" % (mode,)) ValueError: Mode non valide: 'rt' – tktktk0711