2016-12-08 60 views
2

我有一個嵌套的列表包含字符串和整數,我試圖保存到一個txt文件,但我有格式化的麻煩。嵌套列表並保存到文本文件

array = [(string1, int1),(string2, int2),(string3, int3),...(string_n, int_n)] 
with open("output.txt", "w") as f: 
    f.write(repr(array)) 

並獲取原樣保存的數組。

如何格式化輸出,使格式如下,而不是數組原樣?

string1 int1 
string2 int2 
. 
. 
. 
string_n int_n 

這是propably一個非常新手的問題,但我找不到與搜索類似的事情......

回答

2
for s, i in array: 
    f.write('{} {}\n'.format(s, i)) 

我不記得了我的頭頂,如果write包括換行符,但我很確定它沒有。

2

使用以下命令:

array = [('s1', 1),('s2', 2)] 

with open('out.txt', 'w') as f: 
    for item in array: 
     f.write('{} {}\n'.format(*item)) 

輸出:

s1 1 
s2 2 
1

你可以使用join代替

for sub_array in array: 
    f.write(' '.join(sub_array)) 

這將任意長度的數組。

如果你有一個列表而不是混合類型的數組,那麼在使用連接之前,你需要將元素強制轉換爲字符串(正如@Blckknght指出的那樣)。

這可能看起來像這樣

for sub_array in array: 
    f.write(' '.join(map(str,sub_array))) 
+0

其值得注意的是,這僅僅在進行內部序列只包含字符串。如果你有它們的整數,你需要在'join'獲得它們之前的某個點將它們轉換爲字符串(例如,可能用'map(str,sub_array)')。 – Blckknght

+0

@Blckknght你是對的,但如果你創建一個混合類型的數組,例如'[(string,int),...]'那麼int就被強制爲一個字符串,所以sub_array總是字符串。但是,如果OP有清單清單,那麼你是正確的。爲評論歡呼。 – Chinny84

+1

你的編輯看起來不錯,並且可以處理任何類型的內部序列。雖然我不確定我是否理解你的評論。問題中顯示的內部序列是一個元組,它可以包含任何您想要的混合類型的對象。提問者對「數組」這個術語的使用可能會引起誤解。我強烈懷疑他們正在使用像'numpy'數組那樣的固定類型的序列。 – Blckknght