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

同一函数内两次使用csv.reader触发TypeError,求解决方案

解决两次调用csv.reader时的TypeError问题

嘿,我一眼就看出问题所在了——你在第一个with代码块里,把函数参数input_file(原本是文件路径字符串)重新赋值成了文件对象!

看这段出问题的代码:

def make_template(input_file):
    import csv
    with open(input_file,'rt') as input_file:  # 这里把input_file变量覆盖成了文件对象
        reader = csv.reader(input_file, delimiter='\t')
        ## code
    with open(input_file,'rt') as inputf, open('template.csv','w') as final:  # 现在input_file是文件对象,不是路径!
        writer = csv.writer(final, delimiter='\t')
        reader1 = csv.reader(inputf, delimiter='\t')
        ## code

当第一个with块执行完后,input_file已经不再是你传入的文件路径字符串了,而是一个已经被关闭的文件对象。所以第二次调用open(input_file)时,open()函数收到的不是它需要的路径(str/bytes/os.PathLike类型),而是一个文件对象,自然就抛出了TypeError: expected str, bytes or os.PathLike obj...的错误。

修正方案

很简单,只要避免覆盖函数参数的变量名就行,给第一个with里的文件对象换个名字,比如input_f:

def make_template(input_file):
    import csv
    # 把文件对象变量名改成input_f,不覆盖原参数input_file
    with open(input_file,'rt') as input_f:
        reader = csv.reader(input_f, delimiter='\t')
        ## 你的处理代码
    # 现在input_file还是原来的路径字符串,可以正常传入open()
    with open(input_file,'rt') as inputf, open('template.csv','w') as final:
        writer = csv.writer(final, delimiter='\t')
        reader1 = csv.reader(inputf, delimiter='\t')
        ## 你的处理代码

额外小建议

  • 尽量把import csv放在函数外面、文件顶部,这样更符合Python编码规范,避免每次调用函数都重复导入模块。
  • 如果两次文件读取都是处理同一个文件的内容,其实可以考虑把文件内容一次性读取到内存里(比如转成列表),这样只需要打开一次文件,效率更高,示例如下:
    def make_template(input_file):
        import csv
        # 一次性读取所有行到内存
        with open(input_file,'rt') as input_f:
            reader = csv.reader(input_f, delimiter='\t')
            rows = list(reader)
        
        # 使用内存中的rows完成第一次处理
        ## 第一次处理代码,直接遍历rows即可
        
        # 写入模板时,直接用内存中的rows,无需再次打开原文件
        with open('template.csv','w') as final:
            writer = csv.writer(final, delimiter='\t')
            writer.writerows(rows)
            ## 其他处理代码
    

这样既避免了重复打开文件,也彻底杜绝了变量覆盖的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:02:22