2017-06-29 1 views
0

Je suis en train de joindre le texte de plusieurs fichiers en même temps en utilisant la fonction zip, mais je continue à obtenir l'erreur, TypeError: coercing to Unicode: need string or buffer, generator foundTypeError tout en essayant de joindre deux fichiers texte côte à côte

Ceci est mon code,

filepaths = ['file1.txt', 'file2.txt', 'file3.txt'] 
with open('op.txt', 'w') as f: 
    temp = zip(*[open(fpath for fpath in filepaths)]) 
    for lines in temp: 
     outfile.write('\t'.join(line.strip() for line in lines) + '\n') 

S'il vous plaît Aidez-moi avec cette erreur, je suis nouveau à l'écriture avec zip & python

+0

Je pense que vous voulez '[open (fpath) pour fpath dans les chemins de fichiers]' . –

Répondre

0

Je pense que vous vouliez ouvrir chaque fichier, pas le générateur. Vouliez-vous également utiliser f.write au lieu de outfile.write?

Cela a fonctionné pour moi:

filepaths = ['file1.txt', 'file2.txt', 'file3.txt'] 
with open('op.txt', 'w') as f: 
    temp = zip(*[open(fpath) for fpath in filepaths]) 
    for lines in temp: 
     f.write('\t'.join(line.strip() for line in lines) + '\n') 

Notez également que cela n'imprime les lignes à la longueur du plus petit fichier que c'est la façon dont zip se comporte. Si les fichiers varient en longueur et que vous souhaitez voir toutes les lignes supplémentaires, vous aurez besoin d'une stratégie différente, comme celui-ci:

from itertools import izip_longest 

filepaths = ['file1.txt', 'file2.txt', 'file3.txt'] 
with open('op.txt', 'w') as f: 
    temp = izip_longest(*[open(fpath) for fpath in filepaths]) 
    for lines in temp: 
     f.write('\t'.join(line.strip() for line in lines if line) + '\n')