TypeError: prévu un tampon de caractères de l'objet
Je suis en train d'écrire une liste d'une liste dans un nouveau fichier, mais j'obtiens cette erreur:
Traceback (most recent call last): File "", line 1, in
dowork() File "C:\Python27\work\accounting\formatting quickbooks file\sdf.py", ligne 11, dans dowork
WriteFile() File "C:\Python27\work\accounting\formatting quickbooks file\sdf.py", la ligne 71, dans WriteFile
f.écrire(thefile) TypeError: prévu un tampon de caractères de l'objet
Comment puis-je écrire une liste d'une liste dans un fichier?
C'est de cette façon que je suis en train d'écrire:
def WriteFile():
global thefile
f = open("output"+'.csv','w')
f.seek(0)
f.write(thefile)
f.close()
et voici la source si vous en avez besoin:
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)))
Vraiment, vous devez remplacer la variable globale avec une variable que vous passez à chaque fonction, et fermer les fichiers lorsque vous avez terminé avec eux. Et maintenant que nous pouvons voir l'ensemble du code, j'avais suggère fortement de le réorganiser de sorte que vous avez un
double possible de TypeError:: un tampon de caractères de l'objet tout en essayant de sauver entier de texte
ProcessLine
fonction (vous pouvez juste inverser les line
et company
boucles), et un peu de filtre, ligne par ligne, de sorte que vous n'avez pas besoin d'une liste, et n'ont pas besoin d'enlever des choses à partir de la liste sur place, et ainsi de suite. Le tout serait beaucoup plus simple de cette façon.double possible de TypeError:: un tampon de caractères de l'objet tout en essayant de sauver entier de texte
OriginalL'auteur l--''''''---------'''''''''''' | 2012-09-25
Vous devez vous connecter pour publier un commentaire.
Ce que le message d'erreur dit, c'est que vous ne pouvez pas écrire une liste dans un fichier, seulement "un tampon de caractères de l'objet", ce qui signifie une chaîne ou quelque chose d'autre qui agit un peu comme une chaîne de caractères.
Si vous voulez juste écrire la liste dans le fichier de la même façon que vous feriez de les imprimer à la console, vous pouvez écrire
str(thefile)
ourepr(thefile)
(ou même utiliser la redirection de syntaxe dansprint
au lieu d'utiliserfile.write
).Mais vous êtes à l'aide de la
csv
module pour lire l'entrée, et sans doute le résultat dans le même format, alors vous voudrez probablement utilisercsv
de l'écrire aussi.Vous êtes en train de lire comme ceci:
Donc écrire comme ceci:
Je dois mentionner que je n'aurais pas la structure du code comme celui-ci en premier lieu; je ferais quelque chose comme ceci:
OriginalL'auteur abarnert
Vous ne pouvez pas écrire une liste dans un fichier; vous pouvez seulement d'écrire une chaîne de caractères. Convertir la liste à une chaîne, d'une certaine façon, ou d'autre itérer sur la liste et écrire un élément à la fois. Ou que vous soyez à l'aide de la
csv
module, l'utiliser pour écrire dans le fichier.L'appel de quelque chose d'autre qu'un fichier (comme une liste)
thefile
est lié à conduire à la confusion, par la façon dont.TypeError: la séquence de l'élément 0: chaîne attendue, la liste des
merci yo peut ushow moi comment je peux l'utiliser csv module d'écrire?
OriginalL'auteur kindall
thefile est une liste de listes, pas un tampon de caractères.
il y a quelques mauvais ici, à l'échelle mondiale, en nommant une liste thefile, ...
(La bonne réponse est abarnert).
OriginalL'auteur Skylar Saveland