用Python迭代地写入文件,在每次迭代中创建一个新字符串
我想我忽略了显而易见的事实,但如果有人能指出这一点,我将不胜感激。这是一个小时的语法游戏,我很沮丧 以下是一个MWE。运行不到1秒:用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()
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方法的元素列表,因此它不会添加任何元素。您只需要手动将其添加到每一行的末尾