【发布时间】:2014-11-21 19:23:44
【问题描述】:
我有一个脚本,它接收一组数据,以及几个不同输出的命令行选项,具体取决于当时的需要。目前,即使没有将任何内容写入文件,也可能由于使用了“with”而创建了文件。下面的简化代码说明了我的观点。如果使用 -a 和 -b 选项调用程序,则会生成 3 个具有正确输出的文件,但如果不需要 a 或 b,则使用创建“a.output”和“b.output”文件里面什么都没有。
import argparse
parser = argparse.ArgumentParser(description="description")
parser.add_argument("-a", "--a", action='store_true', default = False, help = "A type analysis")
parser.add_argument("-b", "--b", action='store_true', default = False, help = "b type analysis")
args = parser.parse_args()
master_dictionary = {}
if args.a:
master_dictionary["A"] = A_Function()
if args.b:
master_dictionary["B"] = B_Function()
master_dictionary["default"] = default_Function()
with open("a.output", "w") as A, open("b.output", "w") as B, open("default.output", "w") as default:
for entry in master_dictionary:
print>>entry, printing_format_function(master_dictionary[entry])
我知道我可以折叠打印选项以在条件函数调用之后进行,但在实际脚本中,事情更复杂,将打印放在分析块中不太理想。我想要一个专门修改 with 命令的答案。目标是“a.output”和“b.output”文件只有在它们要包含文本时才会被创建。
【问题讨论】:
-
我不认为你的循环会做你认为它会做的事情。执行
for entry in master_dictionary将遍历字符串"A"和"B",而不是您创建的名为A和B的文件对象。
标签: python io with-statement