Генерация текстового файла с зацикленными значениями - PullRequest
0 голосов
/ 07 марта 2020

Так что у меня есть довольно сложная проблема, по крайней мере для меня, которую я пытаюсь решить в python. Я выписал проблему на бумаге и ручке, но у меня проблемы с началом работы.

По сути, я пытаюсь автоматически создать 280 текстовых файлов в python, которые похожи, с 3 изменяемыми параметрами. Максимум изменяются только 2 из 3 параметров одновременно.

Итак, у меня есть три параметра: i = [1, 2, 3, 4, 5, 6, 7, 8], j = [1,0, 0,5, 0,3, 0,1, 0,075, 0,05 и 0,025 ] и k = [0, 15, 30, 45, 60, 75, 82,5]. Потенциальный вывод выглядит примерно так:

title Имя файла геометрия 1 (значение i) 1 1.0 информация (значение j) направление (значение k) другая строка здесь другая строка здесь

Таким образом, итерация проблемы состоит в том, что я буду в 1 с j, равным 1,0, а затем k будет go через его набор от 0 до 82,5. Как только это произойдет, я по-прежнему буду равным 1, j будет равным 0,5, а k будет работать до конца, хотя его значения снова. Теперь каждое итеративное изменение сохраняется в виде собственного текстового файла.

Первый текстовый файл будет тогда i = 1, j = 1.0, k = 0.0. Второй текстовый файл будет тогда i = 1, j = 1.0, k = 15.0. И это шаг за шагом. Я думал о том, чтобы сделать тройное вложение для l oop, но тогда я не слишком уверен, как его настроить эффективно, а затем сохранять после каждой итерации, сохраняя при этом содержимое не в скобках выше константы.

Любое понимание было бы очень полезно. Я еще новичок в этом, но завел свой путь в такую ​​проблему, как эта. Go цифра верно?

Спасибо, ребята!

1 Ответ

0 голосов
/ 07 марта 2020

Итак, из того, что я понял, приведенный ниже код поможет вам создавать файлы для каждой комбинации i, j, k

i = [1,2,3,4,5,6,7,8]
j = [1.0, 0.5, 0.3, 0.1, 0.075, 0.05, 0.025]
k = [0, 15, 30, 45, 60, 75, 82.5]

file_path = '\dir\folder\'
file_header = "Field1 Field2 Field3"

for i_val in i:
    for j_val in j:
        for k_val in k:
            file_content = ' '.join([str(x) for x in [i_val, j_val, k_val]])
            with open(file_path + 'geometry' + str(i_val) + '.txt', 'w') as file:
                file.write(file_header)
                file.write(file_content)

Вместо использования циклов for, вы также можете сделать свой код более pythoni c с помощью функции itertools.product, которая дает вам необходимые комбинации списка в одном go.

обновление кода после комментария от SO:

from itertools import product

i = [1,2,3,4,5,6,7,8]
j = [1.0, 0.5, 0.3, 0.1, 0.075, 0.05, 0.025]
k = [0, 15, 30, 45, 60, 75, 82.5]

file_path = '\dir\folder\'
file_header = "Field1 Field2 Field3\n"

content = list(product(*[i, j, k]))

for file_count, val in enumerate(content):
    print(val) #  for your reference
    file_content = ' '.join([str(x) for x in val])
    #print(file_content)
    with open(file_path + "geometry" + str(file_count+1) + ".txt", "w") as file:
        file.write(file_header)
        file.write(file_content)

Это теперь будет производить файлы по указанному пути с именем geometry # , где # - количество файлов

С вашими входными списками это даст всего 392 файла ... Я надеюсь, что это что ты ожидал ...

...