Python 3.x 多次打开csv.reader

Python 3.x 多次打开csv.reader,python-3.x,csv,Python 3.x,Csv,我试图在同一个函数中打开csv.reader两次。 我使用了2个“with”块,并对变量进行了不同的命名: def make_template(input_file): import csv with open(input_file,'rt') as input_file: reader = csv.reader(input_file, delimiter='\t') ## code with open(input_file,'rt') as inp

我试图在同一个函数中打开csv.reader两次。 我使用了2个“with”块,并对变量进行了不同的命名:

def make_template(input_file):

import csv

with open(input_file,'rt') as input_file:        
    reader = csv.reader(input_file, delimiter='\t')
    ## code    

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')
    ## code
我犯了个错误-

TypeError: expected str, bytes or os.PathLike object, not _io.TextIOWrapper
我做错了什么

谢谢
希拉

你的问题是线路

with open(input_file, 'rt') as inputf:
因为它会用file对象覆盖
input\u file
,所以
open
获取文件对象作为输入,而不是字符串

这将解决您的问题:

import csv

with open(input_file,'rt') as in_file:
    reader = csv.reader(in_file, delimiter='\t')
    ## code

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')
    ## code
一般来说,我喜欢将文件名的概念与文件对象的概念分开。这避免了此类问题,而且可以说更具可读性。 因此,我建议使用以下变量命名:

import csv

with open(input_filename,'rt') as input_file:
    reader = csv.reader(input_file, delimiter='\t')
    ## code

with open(input_filename,'rt') as input_file, open('template.csv','w') as final:
    writer = csv.writer(final, delimiter='\t')
    reader1 = csv.reader(input_file, delimiter='\t')
    ## code

你完全正确!谢谢!