4

所以我正在学习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

请帮忙!

4

2 回答 2

11

那是因为该write方法需要一个字符串作为第一个参数,但您传递给它的是一个数组。

于 2012-04-21T02:53:52.177 回答
9

我猜你在测试你的代码和输入时会得到这个错误'n',但是当你输入时'y',它工作得很好。这是因为这些行:

if load == "n":
myArr = [0, 0, 0,
         0, 0, 0,
         0, 0, 0]

myArr使得list. 不只是将列表写入文件。您必须先将其转换为字符串(只能将字符串写入文件)。

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

fout = open("myArr.bat", "w")
fout.write(' '.join(map(str, myArr)))
fout.close()

这基本上会将以下行写入myArr.bat(假设myArr = [0, 0, 0, 0, 0, 0, 0, 0, 0]):

0 0 0 0 0 0 0 0 0

希望这可以帮助

于 2012-04-21T02:58:29.303 回答