Python中多次调用带参函数仅执行首次的问题求助
问题解决:CSV迭代器耗尽导致后续函数调用无输出
问题根源
csv_reader1是迭代器,迭代器只能被遍历一次:第一次调用type(0)时,已经把CSV里的所有行读完了,后续调用type(1)、type(2)时,for row1 in csv_reader1会直接跳过循环,所以看起来没执行。
解决方案1:每次调用函数重新创建CSV读取器(适合大文件)
每次调用函数时重新打开文件生成读取器,避免迭代器耗尽:
import csv # 不要用list当变量名,会覆盖Python内置类型 my_list = ["a","b","c"] def type_func(count): # 每次调用都重新打开文件、生成读取器 with open("你的CSV文件路径.csv", "r", encoding="utf-8") as f: csv_reader = csv.reader(f) current_item = my_list[count] for row in csv_reader: print(current_item) # 直接处理CSV行(原代码的字符串切片会破坏数据结构) print(",".join(row)) # 按CSV格式拼接行内容,或直接print(row) type_func(0) type_func(1) type_func(2)
解决方案2:先把CSV内容存入列表(适合小文件)
一次性读取所有CSV行到列表,后续反复遍历这个列表:
import csv my_list = ["a","b","c"] # 提前读取所有CSV行到列表 with open("你的CSV文件路径.csv", "r", encoding="utf-8") as f: csv_rows = list(csv.reader(f)) def type_func(count): current_item = my_list[count] for row in csv_rows: print(current_item) print(",".join(row)) # 遍历列表自动调用函数,不用手动写索引 for idx in range(len(my_list)): type_func(idx)
额外注意点
- 避免用
list、type这类Python内置关键字当变量/函数名,会引发隐藏问题 - 原代码中
for i in range(0,2)只会循环0和1,不会覆盖到索引2,用range(len(my_list))更灵活 - 处理CSV行时,不要直接转字符串切片(
str(row1)[1:-1]),直接操作row1列表更可靠
内容的提问来源于stack exchange,提问作者P Kishan
相关产品推荐
相关产品推荐

