2016-09-19 1 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' и увеличиваете 'i' за пределами цикла while. Вы также на самом деле не задаете вопрос, поэтому мы не знаем, что происходит не так (при условии, что ваш отступ правилен в вашем коде) – roganjosh

+0

@roganjosh извините, отформатируйте его лучше. Они уже записываются в файлы. Hwoever, все 3 файла имеют одни и те же данные ... некоторая логика, которую я здесь отсутствует, для цикла. Это только написание первых 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, а затем записать содержимое каждого вложенного списка уникального файл.

EDIT

Я не мог фактически воспроизвести вашу проблему с точки зрения каждого файла, содержащего те же данные. Тем не менее, вы увеличили i в неправильном объеме (для этого требуется дополнительный уровень отступов, я думаю, что вы перезаписывали каждый файл несколько раз в своем коде), и вы не делали close() файлы на каждой итерации. Использование with (Python context manager) означает, что он автоматически закрывает файл после завершения операций. I думаю это рабочая настройка вашего исходного кода ... хотя и со случайным списком.

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 отредактирован, а также очистил мой код до использования 'enumerate', чтобы избавиться от' iterator_count'. Надеюсь, это прояснится. – roganjosh

Смежные вопросы