Python TypeError:执行open()时应为字符缓冲区对象

Python TypeError:执行open()时应为字符缓冲区对象,python,compiler-errors,Python,Compiler Errors,所以我在学习Python。我用数组和open()做了一件简单的事情,这段代码有时有效,有时无效!请帮忙 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,

所以我在学习Python。我用数组和open()做了一件简单的事情,这段代码有时有效,有时无效!请帮忙

    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()
它给了我这个:

   Traceback (most recent call last):
  File "Screen.py", line 35, in <module>
    fout.write(myArr)
TypeError: expected a character buffer object
回溯(最近一次呼叫最后一次):
文件“Screen.py”,第35行,在
fout.write(myArr)
TypeError:应为字符缓冲区对象

请帮忙

这是因为该方法需要一个字符串作为第一个参数,但您正在向它传递一个数组。

我猜想,当您测试代码并输入
'n'
时,会出现此错误,但当您输入
'y'
时,它工作正常。这是因为以下几行:

    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()
if load == "n":
myArr = [0, 0, 0,
         0, 0, 0,
         0, 0, 0]
这使得
myArr
成为
列表
。我们不能简单地将列表写入文件。必须首先将其转换为字符串(只有字符串才能写入文件)

因此,根据您希望在文件中存储此列表的方式,您可以执行以下操作:

fout = open("myArr.bat", "w")
fout.write(' '.join(map(str, myArr)))
fout.close()
这实际上会将以下行写入
myArr.bat
(假设
myArr=[0,0,0,0,0,0,0]
):


希望这有帮助

嗯。。。那么,我该如何取回它呢?我能想到的唯一方法是:
fin=open(“myArr.bat”,“r”)myArr[0]=fin.readline(1)
,但这行不通。。。因为你有那些空间。但是如果我删除空格,那么你会遇到两位数的问题。。。我该怎么做呢?
myArr=map(int,open(“myArr.bat”).readline().strip().split())
如果在
open
中未指定
“r”
,则将
“r”
用作默认模式谢谢!这非常有帮助!那么如何作为字符串传递,以及以后如何检索它?谢谢你的帮助@PlazmotechBinary,如果要将数组中的序列化数据存储在文件中,然后读取该文件并取消序列化,请使用。