запись элементов из списка в текстовый файл в другой строке

#python

#питон

Вопрос:

Я пытаюсь несколько раз получить вводимые пользователем данные, а затем сохранить эти данные в списке, а затем записать элементы списка в текстовый файл. список будет выглядеть так с входными данными.

 prog_input = [120,0,0,100,20,0,100,0,20]  

Я записал это в текстовый файл, используя:

 txtfile1 = open("Input progression data.txt", "w ") txtfile1.write(', '.join([str(item) for item in prog_input])  'n')  

Это просто напечатает их в строке.()

Вывод, который я пытаюсь получить(в текстовом файле):

 120,0,0 100,20,0 100,0,20  

Комментарии:

1. Вы всегда собираетесь принимать 9 входов? Или вы просто хотите разделить все входные данные, которые вы получаете, на строки с 3 элементами в каждой строке?

2. Как вы просматриваете полученный файл? С помощью какой операционной системы и программы вы его открываете?

Ответ №1:

prog_input это просто плоский список, поэтому вам нужно сгруппировать свои элементы по частям, а затем вывести в свой файл

 prog_input = [120, 0, 0, 100, 20, 0, 100, 0, 20] step = 3 with open("Input progression data.txt", "w ") as myfile:  for chunk in [prog_input[n:n step] for n in range(0, len(prog_input), step)]:  myfile.write(','.join(map(str, chunk))   'n')  

Ответ №2:

Вы можете использовать numpy.array_split , чтобы разделить свой список на подсписки размером 3 в каждом:

 import numpy as np  prog_input = [120,0,0,100,20,0,100,0,20] with open("Input progression data.txt", "w") as outfile:  outfile.write("n".join([", ".join(map(str, chunk)) for chunk in np.array_split(prog_input, 3)]))  

Ответ №3:

Похоже, вам нужно 3 значения в строке. Так…

 F = "Input progression data.txt" prog_input = [120,0,0,100,20,0,100,0,20] with open(F, 'w') as outfile:  for o in range(0, len(prog_input), 3):  print(','.join(map(str, prog_input[o:o 3])), file=outfile)  

Ответ №4:

 ', '.join([str(item) for item in prog_input]  

Это повторяет весь список и соединяет все элементы с разделителями-запятыми. Если вы хотите, чтобы результат был чем-то другим, вам нужно сделать это по-другому.

Я предлагаю описать словами, что вы хотите сделать. Из вашего примера видно, что сначала вам нужно взять список и разделить его на списки с тремя элементами в каждом. Я оставляю написание кода для этого в качестве упражнения для читателя.

Ответ №5:

Переместите n в нужное место Это:

 ', '.join([str(item) for item in prog_input])  'n'  

Должно быть :

 ',n'.join([str(item) for item in prog_input])  

Редактировать:

Если вам нужно только 3 элемента в каждой строке, вы можете использовать:

 ',n'.join([', '.join([str(j) for j in prog_input[i:i 3]]) for i in range(0, len(prog_input), 3)])  

Комментарии:

1. Вы проверили это и сравнили с желаемым результатом операции? Ни одна из версий, которые вы дали, не работает так, как они хотят.

2. Кто-то отредактировал ОП, пока я отвечал…

3. Я вижу…форматирование операции было искажено, потому что они просто использовали разрывы строк. Тем не менее, ваши попытки все равно не дали бы желаемого результата, поскольку он был получен из исходной версии вопроса ОП.