2014-02-25 62 views
1

如果我有一個數組:解析簡單數組,並將其保存在一個文件

stuff = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] 

我怎樣才能將其保存在以下格式? 5個值+昏迷+其他5個值+昏迷等

12345, 678910, 1112131415 

我已經試過和它沒有給我想要的解決方案:提前

f = open('file.txt') 
for item in stuff: 
    for i in xrange(5): 
     f.write("%s", item) 
    f.write(", ") 
f.close() 

感謝。

+2

嘗試檢查: http://stackoverflow.com/questions/312443/how-do-you-split-a-list-into-均勻大小的塊在python –

回答

3

試試這個方法:

>>> s 
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] 
>>> n 
5 
>>> [int(''.join(str(x) for x in s[i*n: i*n + n])) for i in range(len(s)/n)] 
[12345, 678910, 1112131415] 

只是一個建議尚未完全測試的代碼

編輯:在文件中寫不喜歡:

>>> L = [''.join(str(x) for x in s[i*n: i*n + n]) for i in range(len(s)/n)] 
>>> with open("file", 'w') as f: 
... for v in L: 
... f.write(v + ', ') 
... 

我還沒有投給int當我在一個文件中寫入。

更新時間:提高代碼
對於損失少拆,你可以做吊頂師任意長度的列表。我提高了代碼,並添加下面:

def split_list(L, n): 
    """split successive n-sized groups from L as a list 
    """ 
    from math import ceil 
    parts = int(ceil(len(L)/float(n))) # ceilng division 5/2 ==> 3 
    return [int(''.join(str(_) for _ in L[i*n: i*n + n])) for i in range(parts)] 

一些測試案例

# test cases 
n = 5 
s = [1, 2, 3 ] 
print split_list(s, 5) # output [123] 
s = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13] 
print split_list(s, 5) # output [12345, 678910, 111213] 
s = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] 
print split_list(s, 5) # output [12345, 678910, 1112131415] 
+0

有沒有辦法讓這個可寫在文件中?提前致謝。 –

+1

@Borja是的。只需創建一個列表並遍歷它,並將文件中的每個值寫入 –

+1

@Borja'L = [''.join(str(x)for x [stuff * i:n * i + n]) (len(stuff)/ n)]'then' for v in L:f.write(v)' –

1

據我的意見,這裏是一些醜陋的簡單的例子:

def chunks(l, n): 
    """ Yield successive n-sized chunks from l. 
    """ 
    for i in xrange(0, len(l), n): 
     yield l[i:i+n] 

with open('file.txt') as f:   
    f.write(', '.join([''.join((str(y) for y in x)) for x in chunks(stuff, 5)])) 

@Grijesh肖漢答案也不錯

1

最簡單的方法,使用計數器

f = open("file.txt") 
cnt = 0 
for item in studff: 
    f.write("%s", item) 
    cnt = cnt + 1 
    if cnt % 5 == 0: 
    f.write(", ") 
f.close() 
1

由於您的需求很簡單。無需拆分數組等。特別是當你需要迭代寫入它們時,使用enumreate。

下面是一個打印到標準輸出的Python3代碼,您可以輕鬆地將其更改爲文件輸出。

for i, x in enumerate(stuff, 1): 
    print(x, end="") 
    if i % 5 == 0: 
     print(",", end="") 
1

如果您還需要你的5個值之間的分隔符,然後使用以下命令:

stuff = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] 
n = 5 
main_separator = ',' 
secondary_separator = '-' 
#secondary_separator = '-' # <- when you do not need a secondary separator between the values 
result = main_separator.join([secondary_separator.join([str(i) for i in stuff[i*n: i*n + n]]) for i in xrange(len(stuff)/n)]) 
print result 

這將產生以下輸出

'1-2-3-4-5,6-7-8-9-10,11-12-13-14-15' 

你可以p RINT到文件只需:

whith open('filename', 'w) 
h.write(result) 
h.close() 
+0

狼它會給'1-2-3-4-5,6-7-8 ......' –

+0

@GrijeshChauhan是的,這正是我試圖展示的。在你的例子中,你不能在5個值之間插入一個分隔符。你如何產生像'1-2-3-4-5,6-7-8-9-10,11-12-13-14-15'的輸出? – wolfrevo

+0

這是好的,但OP沒有要求這一點。想想如果我需要它,那麼我會用你的方法。 –

相關問題