[英]How do I write a list of lists to a file in python?
我的代碼是這個。 我試圖將數字列表基數排序為列表列表,然后將該列表列表寫入文件,每個單獨的列表在不同的行上。 如果嘗試使用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
list_c
是str
的list
。 要將其轉換為單個str
,請使用str.join()
:
f.write('\n'.join(list_c)+'\n')
或者,如果願意,可以單獨編寫每個str
:
for s in list_c:
f.write(s+'\n')
將其轉換為字符串,並在讀取時使用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。
聽起來這是使用csv
模塊的絕好機會。
import csv
with open('numbers.csv', 'wb') as csvfile:
writer = csv.writer(csvfile)
for lst in list_of_lists:
writer.writerow(lst)
正如其他人指出的那樣,您需要以某種方式序列化數據,然后才能將其寫入文件。 您可以進行腌制,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'))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.