首页 > 解决方案 > 生成带有循环值的文本文件

问题描述

所以我有一个相当复杂的问题,至少对我来说,我正试图在 python 中调和。我已经在纸和笔上写出了问题,但开始时遇到了麻烦。

本质上,我试图在 python 中自动制作 280 个文本文件,它们是相似的,有 3 个参数不同。最多 3 个参数中的 2 个一次更改。

所以我的三个参数是 i = [1, 2, 3, 4, 5, 6, 7, 8] , j = [1.0, 0.5, 0.3, 0.1, 0.075, 0.05, and 0.025] 和 k = [ 0、15、30、45、60、75、82.5]。潜在的输出看起来与此非常相似:

title 文件名 geometry 1 (i 的值) 1 1.0 info (j 的值) direction (k 的值) 这里是另一个字符串 这里是另一个字符串

所以问题迭代的方式是 i 将在 1,j 将变为 1.0,然后 k 将通过其 0 到 82.5 的集合。一旦发生这种情况,i 仍将是 1,j 会变为 0.5,并且 k 会再次运行它的值。现在每个迭代更改都保存为自己的文本文件。

那么第一个文本文件将是 i=1, j=1.0, k=0.0。第二个文本文件将是 i=1, j=1.0, k=15.0。它会走下坡路。我正在考虑做一个三重嵌套的 for 循环,但是我不太确定如何有效地设置它,然后在每次迭代后保存,同时保持上面括号中的内容不变。

任何见解都会非常有帮助。我仍然是新手,但我遇到了这样的问题。去图对吧?

多谢你们!

标签: pythonpython-3.xfor-loopnested-loops

解决方案


所以据我了解,下面的代码将帮助您为 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 循环之外,您还可以通过使用itertools.product一次性为您提供所需列表组合的函数来使您的代码更加 Pythonic。

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 个文件...我希望这是您所期望的...


推荐阅读