Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python迭代地写入文件,在每次迭代中创建一个新字符串_Python - Fatal编程技术网

用Python迭代地写入文件,在每次迭代中创建一个新字符串

用Python迭代地写入文件,在每次迭代中创建一个新字符串,python,Python,我想我忽略了显而易见的事实,但如果有人能指出这一点,我将不胜感激。这是一个小时的语法游戏,我很沮丧 以下是一个MWE。运行不到1秒: from itertools import product PARAM_GRID = list(product( range(64, 68), range(64, 68), range(132, 136), range(132, 136), )) SCOREFILE = './fake_scores.csv' def search_distributed()

我想我忽略了显而易见的事实,但如果有人能指出这一点,我将不胜感激。这是一个小时的语法游戏,我很沮丧

以下是一个MWE。运行不到1秒:

from itertools import product

PARAM_GRID = list(product(
range(64, 68),
range(64, 68),
range(132, 136),
range(132, 136),
))

SCOREFILE = './fake_scores.csv'

def search_distributed():

    for param_ix in range(len(PARAM_GRID)):

        params = PARAM_GRID[param_ix]
        score = 0.9

        with open(SCOREFILE, 'a') as f:
            #NOT MINE, and doesn't do what I want
            #f.write('{",".join(map(str, params + (score,)))}\n')

            #MINE, and still doesn't do what I want.
            paramstr = str(params) 
            scorestr = str(score) 
            f.write("\n".join({paramstr + ' ' + scorestr}))

def main():
    search_distributed()

if __name__ == '__main__':
    main()
而不是这样创建的,即包含以下内容的文件:

(64, 64, 132, 132) 0.9(64, 64, 132, 133) 0.9(64, 64, 132, 134) 0.9...
(64, 64, 132, 132) 0.9
(64, 64, 132, 133) 0.9
(64, 64, 132, 134) 0.9
我想要一个包含以下内容的文件:

(64, 64, 132, 132) 0.9(64, 64, 132, 133) 0.9(64, 64, 132, 134) 0.9...
(64, 64, 132, 132) 0.9
(64, 64, 132, 133) 0.9
(64, 64, 132, 134) 0.9

显然,我需要以某种方式修改join命令。我已经在上面展示了我的尝试。有人能解决这个问题吗?

下面是您的代码的一个小改动,可以解决您的问题:

from itertools import product

PARAM_GRID = list(product(
range(64, 68),
range(64, 68),
range(132, 136),
range(132, 136),
))

SCOREFILE = './fake_scores.csv'

def search_distributed():

    for param_ix in range(len(PARAM_GRID)):

        params = PARAM_GRID[param_ix]
        score = 0.9

        with open(SCOREFILE, 'a') as f:
            #NOT MINE, and doesn't do what I want
            #f.write('{",".join(map(str, params + (score,)))}\n')

            #MINE, and still doesn't do what I want.
            paramstr = str(params) 
            scorestr = str(score) 
            f.write(paramstr + ' ' + scorestr + '\n')

def main():
    search_distributed()

if __name__ == '__main__':
    main()
由于您只提供一个元素{paramstr+''+scorestr}只是一个字符串,而不是join方法的元素列表,因此它不会添加任何元素。您只需要手动将其添加到每一行的末尾