You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 如何在每次循环执行完成后清空列表内的元素

问题原因

你将image_list初始化放在了循环外层,每次处理新商品的循环执行时,都会复用同一个列表对象,自然会累加之前存储的URL。

修复方案

两种实现方式二选一即可:

  • 更推荐:把列表初始化放到循环内部,每次处理新商品时自动生成空列表,不会携带上一次的内容
  • 在写入CSV完成后,调用image_list.clear()手动清空列表

同时你原有代码的except块存在变量引用错误:i是try块内for循环的局部变量,如果try块在获取元素阶段就报错,i未定义会触发二次报错,同步给你修正了这部分逻辑,优化了CSV文件打开的重复操作:

import csv
from selenium import webdriver

# 把CSV文件打开操作放到循环外,避免频繁开闭文件提升性能
with open("product.csv", "a", encoding="utf-8") as f:
    writeFile = csv.writer(f)
    for page_num in range(1,6):
        # 每次处理新页面/新商品时,初始化空的图片列表
        image_list = []
        # 此处保留你的其他业务代码
        try:
            images = driver.find_elements_by_xpath("//img[@class='Image--fadeIn lazyautosizes Image--lazyLoaded']")
            for i in images:
                image = i.get_attribute('data-original-src')
                image_list.append("https:"+image)
                print('######image: ',image)
        except:
            # 修正原有错误:直接取单个元素的属性,不需要引用未定义的i
            image = driver.find_element_by_css_selector("#shopify-section-product-template .Image--lazyLoaded").get_attribute('data-original-src')
            image_list.append("https:"+image)
            print(image)
        
        # 写入当前商品的图片列表
        writeFile.writerow([image_list])
        # 如果你选第二种手动清空的方案,就把image_list初始化放回外层,这里加一行image_list.clear()

补充说明

如果你的CSV里希望把多个图片URL分开存储而非存在同一个单元格,可以直接把image_list传给writerow方法,不需要套一层列表:writeFile.writerow(image_list)

内容的提问来源于stack exchange,提问作者boyenec

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 19:48:03