2016-09-19 109 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

相关问题