Python循环生成CSV文件累加上一轮循环数据的问题如何解决
问题原因
存储单条循环数据的列表name在for循环外部初始化,每次循环都会往同一个列表里追加新数据,导致后续生成的CSV自动包含前面所有循环的内容。
修复方案
把name = []这行代码移动到for循环内部的第一行,每次循环开始时创建全新的空列表存储当前循环的数据,不会保留历史内容。
修改后的核心代码片段如下:
# 冗余代码可删除:df = pd.read_csv(r'/Users/Documents/tes.csv') 该行读取结果会被下一行覆盖 df = pd.read_csv(r'/Users/Documents/date.csv') for row in df.itertuples(index=True): name = [] # 每次循环先初始化空列表,核心修改点 # 剩下的原有逻辑保持不变即可 column = row.stick l= driver.find_element (By.CSS_SELECTOR, "#pop_mm_stock") l.clear() l.send_keys(column) column1 = row.date cal1= driver.find_element (By.CSS_SELECTOR, "#pop_bas_from") cal1.clear() cal1.send_keys(column1) print(column) n={'n': column} name.append(n) cal2= driver.find_element (By.CSS_SELECTOR, "#pop_bas_to") cal2.clear() cal2.send_keys(column1) print(column1) n={'n': column1} name.append(n) show1=driver.find_element (By.CLASS_NAME, "button") a.move_to_element(show1).click().perform() time.sleep(5) head_up=WebDriverWait(driver, 2).until(EC.presence_of_element_located((By.XPATH, "/html[1]/body[1]/div[8]/div[1]/table[2]"))) print(head_up.text) n={'n': head_up.text} name.append(n) pop_up=WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.XPATH, "/html[1]/body[1]/div[8]/div[1]/div[1]/table[1]"))) time.sleep(3) print(pop_up.text) n={'n': pop_up.text} name.append(n) d=pd.DataFrame(name) d.to_csv(r'' + str(column) + str(column1) + '_AVR.csv', index=False, header=False) driver.back()
如果你需要每个CSV文件里的行索引保持全局连续(和你贴的期望输出一致,第一个文件索引为0、1、2、3,第二个接着从4开始计数),可以额外增加全局计数变量,代码调整如下:
df = pd.read_csv(r'/Users/Documents/date.csv') global_index = 0 # 全局计数变量,在循环外初始化 for row in df.itertuples(index=True): name = [] # 原有采集数据的逻辑不变,把数据存入name列表 d = pd.DataFrame(name) # 重设索引为全局连续值 d.index = range(global_index, global_index + len(d)) global_index += len(d) # 导出时开启index输出 d.to_csv(r'' + str(column) + str(column1) + '_AVR.csv', index=True, header=False)
内容的提问来源于stack exchange,提问作者wikwik
相关产品推荐
相关产品推荐

