2016-09-19 106 views
0

所以我想寫一個列表列表單獨文件。 每個列表包含100個或更少的字符串對象。目標是保持一個文本文件少於100行不超過。寫一個列表到一個單獨的文本文件,每個列表中有一個文件列表

要做到這一點,我分割了一個列表,但現在我遇到了一個問題,將它們寫入文件。 因此,必須在列表中將列表寫入其自己的單獨文件。總共有275個字符串對象

size=100 
list_ofList_flows=[parameter_list[i:i+size] for i in range(0,len(parameter_list), size)] 
#above list_ofList_flows contains [100][100][75] in terms of length 

fileNumbers = int(math.ceil((len(parameter_list)/100))) 
#fileNumbers is 3, because we have 3 sets of lists[100, 100, 75] 

i = 0 
while i < fileNumbers: 

    for flowGroup in list_ofList_flows: 
     f = open("workFlow_sheet" + str(i) + ".txt", "w") 

     for flo in flowGroup: 
      f.write(flo + '\n') 



    i = i + 1 
+0

請改善您的代碼格式並提供示例輸入和輸出。 – albert

+0

你不要''關閉'''for'循環中的每個文件,並且在'while'循環之外增加'i'。你也不會問一個問題,所以我們不知道發生了什麼問題(假設你的代碼中的縮進是正確的) – roganjosh

+0

@roganjosh對不起,格式化它更好。他們已經被寫入文件。但是,所有3個文件都有相同的數據...我在這裏用for循環丟失了一些邏輯。它只寫了前100個字符串對象,而不是剩下的 – dedpo

回答

1

這樣的事情會起作用。我必須使用random來生成一些數據,並將其轉換爲長度爲275個元素的列表。

import random 

def chunks(l, n): 
    n = max(1, n) 
    return [l[i:i + n] for i in range(0, len(l), n)] 

data = [random.randint(0, 10) for x in range(275)] 

chunked_data = chunks(data, 100) 

for file_num, sublist in enumerate(chunked_data): 
    with open("workFlow_sheet{}.txt".format(file_num), 'w') as outfile: 
     for item in sublist: 
      outfile.write(str(item) + '\n') 

從本質上講,子將你的數據轉換成100最大長度的嵌套的列表,然後寫每個嵌套列表的內容,以一種獨特的文件。

編輯

我不能實際上包含相同數據的每個文件的條款重現您的問題。但是,您在錯誤的作用域中增加了i(它需要額外的縮進級別,我認爲您在代碼中多次覆蓋了每個文件),並且在每次迭代中都沒有文件。使用with(Python context manager)僅僅意味着它在操作完成後自動關閉文件。我認爲這是你原來的代碼工作調整......儘管隨機列表生成。

import random 
import math 

parameter_list = [random.randint(0, 10) for x in range(275)] 

size=100 
list_ofList_flows=[parameter_list[i:i+size] for i in range(0,len(parameter_list), size)] 
#above list_ofList_flows contains [100][100][75] in terms of length 

fileNumbers = int(math.ceil((len(parameter_list)/100))) 
#fileNumbers is 3, because we have 3 sets of lists[100, 100, 75] 

i = 0 
while i < fileNumbers: 

    for flowGroup in list_ofList_flows: 
     f = open("workFlow_sheet" + str(i) + ".txt", "w") 

     for flo in flowGroup: 
      f.write(str(flo) + '\n') 
     f.close() 


     i = i + 1 
+0

Perfecto!開放在這裏是關鍵。你能告訴我我哪裏出錯了嗎? – dedpo

+0

@dedpo即將開始尋找,並試圖讓我的答案更清潔 – roganjosh

+1

@dedpo編輯,並清理我的代碼,以使用'枚舉'擺脫'iterator_count'。希望澄清。 – roganjosh

相關問題