从While循环创建一个新的.CSV文件

时间:2019-11-13 17:19:26

标签: python pandas csv while-loop

我有一个while循环,它工作得很好(它确实可以实现预期的效果)。当我运行while循环并将其生成的数据帧写入.CSV时,它没有问题,并保持循环(尽管覆盖了.CSV文件)

但是我试图弄清楚每次循环运行时如何将df写入新文件(具有可变的生成名称)。我似乎无法弄清楚。

有人有建议吗?

 f = open('ActionLogLinks.csv')
    csv_f = csv.reader(f)
    action_log_links = []
    for column in csv_f:
      action_log_links.append(column[1])
    cand_ref = []
    for column in csv_f:
      cand_ref.append(column[0])
    position = 0
    while position <len(action_log_links):
        browser.get(action_log_links[position])        
        for cand in cand_ref:
            filename="Loop_Test"+"_"+str(cand_ref)+".csv"
            df.to_csv(filename, index=False)
        position = position + 1

2 个答案:

答案 0 :(得分:0)

我使用的常见解决方案是在创建输出时在文件名中添加时间戳。由于您对其余的代码非常满意,因此尽管可以将导入放在脚本的顶部,但是只需要更新编写文件的部分。

但是,仔细阅读后,我认为您可能对如何“遍历”可迭代项有疑问。您在循环内部使用cand_ref,而不是在循环cand

中动态更新

注意,我已将您的字符串连接更改为使用较新的“ f-string”格式:

  from time import strftime   

  for cand in cand_ref:
        filename=f"Loop_Test_{cand}_{strftime('%Y%m%d-%H%M%S')}.csv"
        df.to_csv(filename, index=False)

答案 1 :(得分:0)

您可以使用以下代码创建并打开一个具有随机名称的新文件以供写入。

您还可以使用时间戳记路线,在这种情况下,请确保时间戳记的精度足够好,以至于在循环的任何两个相邻迭代中都不会生成相同的值。

import string
import random
name = "".join([random.choice(string.lowercase) for _ in range(10)]) + ".csv"
f = open(name, "w+")