我的代码就是这个。我试图将一个数字列表基本排序到列表列表中,然后将列表列表写入文件,每个列表在不同的行上。如果我尝试使用f.write
,它会给我一个字符缓冲区预期错误。
from math import log
b = open("radix.in.txt").readlines()
a = [int(i) for i in b]
f = open("radix.out.txt", "w")
def getIndex(num, base, digit_num):
return (num // base ** digit_num) % base
def newLists(base):
return [ [] for i in range(base) ]
def order(q, base, digit_num):
placehold = newLists(base)
for num in a:
placehold[getIndex(num, base, digit_num)].append(num)
return placehold
def radixSort(a, base):
passes = 3
new_list = a
for digit_num in range(passes):
new_list = order(new_list, base, digit_num)
list_c = [str(i) for i in new_list]
print list_c
radixSort(a, 10)
在打印list_c之后放入f.write(list_c)给出此追溯
Traceback (most recent call last):
File "C:\Users\Nolan Caldwell\Desktop\HW5.py", line 29, in <module>
radixSort(a, 10)
File "C:\Users\Nolan Caldwell\Desktop\HW5.py", line 26, in radixSort
f.write(list_c)
TypeError: expected a character buffer object
答案 0 :(得分:3)
list_c
是list
- of str
。要将其转换为单个str
,请使用str.join()
:
f.write('\n'.join(list_c)+'\n')
或者,如果您愿意,可以单独编写每个str
:
for s in list_c:
f.write(s+'\n')
答案 1 :(得分:0)
将其转换为字符串并使用literal_eval在读取时将其作为数组获取
f=open('file.txt','w')
a=[[1,2],[3,4],[4,5]]
b=str(a)
f.write(b)
当你阅读时,
import ast
f=open('file.txt','r')
a=f.read()
b=ast.literal_eval(a)
因为write()
函数只能处理字符串。或者将列表列表转换为字符串并使用write。
答案 2 :(得分:0)
听起来很有可能使用csv
模块。
import csv
with open('numbers.csv', 'wb') as csvfile:
writer = csv.writer(csvfile)
for lst in list_of_lists:
writer.writerow(lst)
答案 3 :(得分:0)
正如其他人所指出的那样,在将数据写入文件之前,需要以某种方式序列化数据。你可以pickle,json编码,xml编码,把它粘贴在像sqlite这样的数据库中,逐行写入,把它放在CSV文件中等等......“最好”的方法(没有最好的)取决于什么您计划稍后使用该文件。人们需要阅读吗?非python程序需要读取它吗?它是否足够大以至于关注它占用的空间量?
如果您只想保存整数列表并希望它在许多编程语言中可读,我喜欢json
import json
(... your other stuff here...)
new_list = order(new_list, base, digit_num)
json.dump(new_list, open('myfile.json', 'w'))