如何在 Python 中向 argparse 添加写入文件选项?
How to add a write file option to argparse in Python?
我想创建一个非常简单的脚本,在终端中接收两个不同的路径(输入目录和输出单个文件)。所以我尝试了这个:
if __name__ == "__main__":
p = argparse.ArgumentParser(NAME)
p.add_argument("DIR", default=None,
action="store", help="Inpunt corpus files")
p.add_argument("-o", "--output",
help="Directs the output to a name of your choice")
opts = p.parse_args()
test = tuple(get_all(opts.DIR))
with open('opts.output','w') as out:
csv_out=opts.output.csv.writer(out, delimiter='|')
............
...more lines of code...
................
特别是,我遇到了这条线的问题:
with open('opts.output','w') as out:
我不知道如何指定`.csv格式的输出单个文件,当我在终端测试上面的脚本时没有任何反应:
user@MacBook-User-2:~/Projects $ python script_v1.py /Users/user/Downloads/directory -o /Users/user/Desktop/
知道如何解决这个问题吗?在此先感谢大家。
我想你想要 with open(opts.output, 'w')
而不是 with open('opts.output', 'w')
注意,argparse 实际上有一个特殊的文件类型:
parser.add_argument('-o', '--output', type=argparse.FileType('w'),
default=sys.stdout)
在这种情况下,文件已经为您打开,并且设置了合理的默认值 stdout
:
opts.output.write('xyz')
这不是 argparse
问题;这是关于正确调用 csv.writer
。
查看此 csv
示例(来自 csv 文档页面):
import csv
with open('eggs.csv', 'wb') as csvfile:
spamwriter = csv.writer(csvfile, delimiter=' ',
quotechar='|', quoting=csv.QUOTE_MINIMAL)
spamwriter.writerow(['Spam'] * 5 + ['Baked Beans'])
spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])
如果您将 'eggs.csv' 替换为 opts.output
中的字符串,那应该可以工作。请注意文件的打开方式 - 'wb'.
我认为 FileType
在这里没有帮助。当然它会打开文件,如果不能打开,会给出一个很好的 argparse
消息。但它能正确打开文件吗?那个打开的文件不能在 with
上下文中使用。
并且当您调用此脚本时,请指定一个 csv 文件名,而不仅仅是一个目录。
-o /Users/user/Desktop/aname.csv
获得类似 csv
示例的东西,在脚本中硬编码测试文件名。一旦成功,您就可以担心从命令行获取名称了。
我想创建一个非常简单的脚本,在终端中接收两个不同的路径(输入目录和输出单个文件)。所以我尝试了这个:
if __name__ == "__main__":
p = argparse.ArgumentParser(NAME)
p.add_argument("DIR", default=None,
action="store", help="Inpunt corpus files")
p.add_argument("-o", "--output",
help="Directs the output to a name of your choice")
opts = p.parse_args()
test = tuple(get_all(opts.DIR))
with open('opts.output','w') as out:
csv_out=opts.output.csv.writer(out, delimiter='|')
............
...more lines of code...
................
特别是,我遇到了这条线的问题:
with open('opts.output','w') as out:
我不知道如何指定`.csv格式的输出单个文件,当我在终端测试上面的脚本时没有任何反应:
user@MacBook-User-2:~/Projects $ python script_v1.py /Users/user/Downloads/directory -o /Users/user/Desktop/
知道如何解决这个问题吗?在此先感谢大家。
我想你想要 with open(opts.output, 'w')
而不是 with open('opts.output', 'w')
注意,argparse 实际上有一个特殊的文件类型:
parser.add_argument('-o', '--output', type=argparse.FileType('w'),
default=sys.stdout)
在这种情况下,文件已经为您打开,并且设置了合理的默认值 stdout
:
opts.output.write('xyz')
这不是 argparse
问题;这是关于正确调用 csv.writer
。
查看此 csv
示例(来自 csv 文档页面):
import csv
with open('eggs.csv', 'wb') as csvfile:
spamwriter = csv.writer(csvfile, delimiter=' ',
quotechar='|', quoting=csv.QUOTE_MINIMAL)
spamwriter.writerow(['Spam'] * 5 + ['Baked Beans'])
spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])
如果您将 'eggs.csv' 替换为 opts.output
中的字符串,那应该可以工作。请注意文件的打开方式 - 'wb'.
我认为 FileType
在这里没有帮助。当然它会打开文件,如果不能打开,会给出一个很好的 argparse
消息。但它能正确打开文件吗?那个打开的文件不能在 with
上下文中使用。
并且当您调用此脚本时,请指定一个 csv 文件名,而不仅仅是一个目录。
-o /Users/user/Desktop/aname.csv
获得类似 csv
示例的东西,在脚本中硬编码测试文件名。一旦成功,您就可以担心从命令行获取名称了。