Python3读取CSV文件循环解析时遇文件已关闭错误求助
解决Python读取CSV时"I/O operation on closed file"错误
问题原因
你的代码核心错误是**for row in reader循环缩进错误**,放在了with代码块外面。with语句的特性是代码块执行完毕后会自动关闭文件,这时候再去遍历reader就会触发文件已关闭的IO错误。
另外还有一个隐性问题:api.submit_order(row['x'], row['y'], row['z'])写法错误,csv.reader返回的是列表对象,不是字典,不能用键名访问,必须用索引(比如row[0]、row[1])。
修正后的代码
把循环缩进至with代码块内部,同时修正API调用的参数访问方式:
import csv with open('out.txt', "r") as csvfile: reader = csv.reader(csvfile, delimiter=',') x = [] y = [] z = [] for row in reader: x.append(row[0]) # 把数量字符串转成整数(多数交易API要求数值类型) y.append(int(row[1])) z.append(row[2]) # 按API要求传递参数,注意参数顺序和类型匹配 api.submit_order( symbol=row[0], qty=int(row[1]), side=row[2], type='market', time_in_force='day' )
拓展:在其他函数中解析数据
如果需要把读取到的数组传递到另一函数解析,可以先在with块内完成数据读取,再调用目标函数:
import csv def parse_and_execute(symbols, quantities, sides): # 这里是你的解析逻辑,比如遍历数据执行订单 for sym, qty, side in zip(symbols, quantities, sides): api.submit_order( symbol=sym, qty=qty, side=side, type='market', time_in_force='day' ) # 读取CSV数据存入数组 with open('out.txt', "r") as csvfile: reader = csv.reader(csvfile, delimiter=',') x = [] y = [] z = [] for row in reader: x.append(row[0]) y.append(int(row[1])) z.append(row[2]) # 调用外部函数解析执行 parse_and_execute(x, y, z)
内容的提问来源于stack exchange,提问作者Richard Pagotto
相关产品推荐
相关产品推荐

