3

我正在使用 argparse,我想要类似的东西:test.py --file hello.csv

def parser():
   parser.add_argument("--file", type=FileType('r'))
   options = parser.parse_args()

   return options

def csvParser(filename):
   with open(filename, 'rb') as f:
       csv.reader(f)
       ....
   ....
   return par_file

csvParser(options.filename)

我收到一个错误:TypeError 强制转换为 Unicode:需要字符串或缓冲区,找到文件。

我将如何解决这个问题?

4

1 回答 1

7

FileType() argparse类型返回一个已经打开的文件对象。

您无需再次打开它:

def csvParser(f):
   with f:
       csv.reader(f)

argparse文档中:

为了方便使用各种类型的文件,argparse模块提供了工厂,FileType它接受函数的mode=、和参数。例如, FileType('w') 可用于创建可写文件:bufsize=encoding=errors=open()

>>>
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('bar', type=argparse.FileType('w'))
>>> parser.parse_args(['out.txt'])
Namespace(bar=<_io.TextIOWrapper name='out.txt' encoding='UTF-8'>)

并从FileType()对象文档中:

FileType对象为类型的参数将打开命令行参数作为具有请求模式、缓冲区大小、编码和错误处理的文件(open()有关更多详细信息,请参阅函数)

于 2013-06-28T17:35:58.487 回答