J'essaie d'écrire une liste d'une liste dans un nouveau fichier, mais je reçois cette erreur:
Traceback (appel le plus récent): fichier "", ligne 1, dans Dowork () Fichier "C: \ Python27 \ Travail \ Comptabilité \ Formatage Fichier QuickBooks \ Sdf.py", ligne 11, à Dowork Fichier Royer () C: \ Python27 \ Travail \ Comptabilité \ Formatage Fichier QuickBooks \ Sdf.py ", Ligne 71, dans Writefile F.Write (thefile) TypeError: Attendez un objet tampon de caractère P> blockQuote>
Comment écrire une liste d'une liste dans un fichier? strong> p> Voici comment je vais: P>
import csv thefile = [] output = [] def dowork(): sourceFile='e.csv' thefile=ReadFile(sourceFile) CleanFile(sourceFile) ProcessFile() WriteFile() def ReadFile(filename): return list(csv.reader(open(filename, 'rb'), delimiter=',', quotechar='"'))[1:] def CleanFile(sourceFile): global thefile thefiletmp=[] for i, line in enumerate(thefile): if line[2]=='': del thefile[i] else: thefiletmp.append(line[4:]) thefile=thefiletmp def ProcessFile(): global thefile iCompany=1 iNum=0 iDate=2 iAging=3 iBalance=4 COMPANIES=GetDistinctValues(1) mytemparray=[] mytempfile=[] for company in COMPANIES: for line in thefile: if line[iCompany]==company: mytemparray.append(line[iCompany]) mytemparray.append(line[iNum]) mytemparray.append(line[iDate]) if line[2] in range(0,31): mytemparray.append(line[iBalance]) mytemparray.append('0') mytemparray.append('0') mytemparray.append('0') if line[2] in range(31,61): mytemparray.append('0') mytemparray.append(line[iBalance]) mytemparray.append('0') mytemparray.append('0') if line[2] in range(61,91): mytemparray.append('0') mytemparray.append('0') mytemparray.append(line[iBalance]) mytemparray.append('0') if line[2] >90: mytemparray.append('0') mytemparray.append('0') mytemparray.append('0') mytemparray.append(line[iBalance]) mytempfile.append(mytemparray) mytemparray=[] thefile=mytempfile def WriteFile(): global thefile f = open("output"+'.csv','w') f.seek(0) f.write(thefile) f.close() def GetDistinctValues(theColumn): return sorted(list(set(line[theColumn] for line in thefile)))
3 Réponses :
Vous ne pouvez pas écrire une liste dans un fichier; Vous pouvez seulement écrire une chaîne. Convertissez la liste en une chaîne d'une manière ou d'une autre, ou bien itérer sur la liste et écrivez un élément à la fois. Ou vous utilisez le module appeler autre chose qu'un fichier (tel qu'une liste) csv code>, utilisez-le pour écrire dans le fichier. P>
thefile code> est obligé de conduire à la confusion, juste à la manière. P>
TypeError: Séquence Article 0: Chaîne attendue, liste trouvée
THEFILE est une liste de listes, pas un tampon de caractères.
for sublist in thefile: f.write("".join(sublist)) # perhaps
Quel est le message d'erreur indique que vous ne pouvez pas écrire une liste dans un fichier, seul "un objet tampon de caractère", ce qui signifie une chaîne ou quelque chose d'autre qui agit beaucoup comme une chaîne.
Si vous venez de Voulez-vous écrire la liste dans le fichier de la même manière que vous les imprimeriez à la console, vous pouvez écrire mais vous utilisez le module Vous lisez comme ceci: p> alors écrivez comme ceci: p> Je devrais mentionner que je ne structions pas le code comme celui-ci en premier lieu ; Je ferais quelque chose comme ceci: p> str (thefile) code> ou
REC (thefile) code> (ou même Utilisez la syntaxe redirection dans
Imprimer code> au lieu d'utiliser
fichier.write code>). p>
csv code> Pour lire l'entrée, vous voulez probablement la sortie dans le même format, vous souhaitez donc probablement utiliser
csv code> pour l'écrire aussi. p>
Vous devez vraiment remplacer la variable globale avec une variable que vous passez à chaque fonction et fermez les fichiers lorsque vous avez terminé avec eux. Et maintenant que nous pouvons voir tout le code, je vous suggère fortement de la réorganiser afin que vous ayez une fonction
processus code> (vous pouvez simplement inverser la ligne
la ligne code> et
société < / Code> LOPS) et simplement filtrer la ligne par ligne, de sorte que vous n'avez pas besoin d'une liste et n'avez pas besoin de supprimer les choses de la liste en place, etc. Le tout serait beaucoup plus simple de cette façon.
Dupliqué possible de TypeError: Attendez un personnage Objet tampon - tout en essayant de sauver l'entier à TextFile