Python 3.x 多次打开csv.reader
我试图在同一个函数中打开csv.reader两次。 我使用了2个“with”块,并对变量进行了不同的命名: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
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
你完全正确!谢谢!