2013-04-16 141 views
0

我的代碼是這樣的。我正在嘗試將列表中的數字排序到列表列表中,然後將列表列表寫入文件,並將每個列表放在不同的行上。如果我嘗試使用f.write,它會給我一個字符緩衝區的預期錯誤。如何在python中將列表列表寫入文件?

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) 

把f.write(list_c)在打印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 
+1

您可以發佈完整的錯誤? – thegrinner

回答

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。

3

list_clist -of- str。要轉換到一個str,使用str.join()

f.write('\n'.join(list_c)+'\n') 

或者,如果你願意,你可以寫每個str獨立:

for s in list_c: 
    f.write(s+'\n') 
+0

這兩個都只是創建一個空的文本文件。 –

+0

@NolanCaldwell - 盡我所能,我不相信你。第一個*不能*產生一個空文本文件 - 它總是會打印至少一個空行。此外,當我測試這些,他們產生10行輸出文件,其內容取決於給定的輸入。也許你添加的行沒有被執行? –

+0

我完全相信它應該工作。我很難理解爲什麼它沒有。我在打印語句之前添加了您提供給radixSort方法的代碼,它肯定會執行它們,不是嗎?對於您的兩個代碼示例,都會創建一個名爲「radix.out.txt」的文本文件,但文件中沒有任何內容(可能是空行)。 –

0

聽起來就像是使用csv模塊一個很好的機會。

import csv 
with open('numbers.csv', 'wb') as csvfile: 
    writer = csv.writer(csvfile) 
    for lst in list_of_lists: 
     writer.writerow(lst) 
0

正如其他人指出的那樣,您需要以某種方式序列化數據,然後才能將其寫入文件。你可以使用pickle,json encode,xml encode,把它粘貼到像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'))