So I'm learning Python. I was doing a simple thing with arrays and open(), and sometimes this code works, and sometimes it doesn't! Please help!
    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()
Its giving me this :
   Traceback (most recent call last):
  File "Screen.py", line 35, in <module>
    fout.write(myArr)
TypeError: expected a character buffer object
Please help!
That's because the write method expects a string as the first argument, but you're passing it an array.
I'm going to guess that you get this error when you test your code and input 'n', but when you input 'y', it works just fine. This is because of these lines:
if load == "n":
myArr = [0, 0, 0,
         0, 0, 0,
         0, 0, 0]
This makes myArr a list. One does not simply write a list to a file. You must convert it into a string first (only strings can be written to files).
So depending on how you want to store this list in your file, you could do this:
fout = open("myArr.bat", "w")
fout.write(' '.join(map(str, myArr)))
fout.close()
This would essentially write the following line to myArr.bat (assuming myArr = [0, 0, 0, 0, 0, 0, 0, 0, 0]):
0 0 0 0 0 0 0 0 0
Hope this helps
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With