TypeError: prévu un tampon de caractères de l'objet lors de l'ouvrir()
Donc je suis en train d'apprendre le Python. Je faisais une chose simple avec des tableaux et open(), et parfois ce code fonctionne, et parfois ça ne marche pas! S'il vous plaît aider!
print('Load? (Y/N)')
load = raw_input()
if load == "y":
fin = open("myArr.bat", "r")
myArr = fin.readline()
if load == "n":
myArr = [0, 0, 0,
0, 0, 0,
0, 0, 0]
if load != "y" and load != "n":
print 'WUT?'
exit()
print (myArr[0]) , '|' , (myArr[1]) , '|' , (myArr [2])
print '----------'
print (myArr[3]) , '|' , (myArr[4]) , '|' , (myArr [5])
print '----------'
print (myArr[6]) , '|' , (myArr[7]) , '|' , (myArr [8])
print '_______________________________________________'
print 'What shall I change?'
print 'Number in array: '
foo = raw_input()
doo = int(float(foo))
print 'Number to change to: '
bar = raw_input()
dar = int(float(bar))
myArr[doo] = dar
print '_______________________________________________'
print (myArr[0]) , '|' , (myArr[1]) , '|' , (myArr [2])
print '----------'
print (myArr[3]) , '|' , (myArr[4]) , '|' , (myArr [5])
print '----------'
print (myArr[6]) , '|' , (myArr[7]) , '|' , (myArr [8])
fout = open("myArr.bat", "w")
fout.write(myArr)
fout.close()
Sa me donne ceci :
Traceback (most recent call last):
File "Screen.py", line 35, in <module>
fout.write(myArr)
TypeError: expected a character buffer object
S'il vous plaît aider!
OriginalL'auteur Thor Correia | 2012-04-21
Vous devez vous connecter pour publier un commentaire.
C'est parce que la
write
méthode attend une chaîne de caractères comme le premier argument, mais vous êtes en lui passant un tableau.si vous souhaitez stocker les données sérialisées à partir de la matrice dans un fichier, puis plus tard de lire le fichier et unserialize, utilisez pickle.
OriginalL'auteur rid
Je vais deviner que vous obtenez ce message d'erreur lorsque vous testez votre code d'entrée et de
'n'
, mais lors de la saisie'y'
, il fonctionne très bien. C'est à cause de ces lignes:Ce fait
myArr
unlist
. On ne se contente pas d'écrire une liste dans un fichier. Vous devez le convertir en une chaîne (uniquement les chaînes peuvent être écrites dans des fichiers).Donc, en fonction de la façon dont vous voulez enregistrer cette liste dans votre fichier, vous pourriez faire ceci:
Cela aurait pour effet d'écrire la ligne suivante à
myArr.bat
(en supposant quemyArr = [0, 0, 0, 0, 0, 0, 0, 0, 0]
):Espère que cette aide
fin = open("myArr.bat", "r") myArr[0] = fin.readline(1)
Mais qui ne fonctionne pas... parce que vous avez ces espaces. Mais Si je supprime les espaces alors que vous auriez des problèmes avec 2 chiffres... comment puis-je faire cela?myArr = map(int, open("myArr.bat").readline().strip().split())
Si vous ne spécifiez pas"r"
dansopen
,"r"
est utilisé comme mode par défautMerci!!!! Qui a été EXTRÊMEMENT utile!
OriginalL'auteur inspectorG4dget