目标:
例如: 在命令行中:
$ python printfile.py --out_arg fileOutput.txt
...会在与printfile.py
相同的目录中生成fileOutput.txt代码:
def parse_arguments():
options = parse_arguments()
#output arguments
parser.add_argument("--out_arg", action='store', default=False, dest='out_arg',
help="""Output file """)
def print_output(seqID, seq, comm):
# "a" append is used since this is the output of a for loop generator
if options.out_arg
outputfh = open(options.out_33,"a")
outputfh.write("@{}\n{}\n{}\n+".format(seqID, seq, comm))
else:
sys.stderr.write("ERR: sys.stdin is without sequence data")
然而,当我从def main()调用print_output时 - 未显示 - 传递我感兴趣的元组(seqID,seq,comm),没有写入文件,也没有给出错误消息。是不是将存储文件存储为dest的argparse参数?在尝试写入时是否使用了文件句柄?
答案 0 :(得分:2)
您永远不会在输出文件上调用close
。 Python的写作在某种程度上是缓冲的,如果你不打电话给flush
或close
,你可以根据doc进行缓存。文件中的输出(或简称文件中的文件)。
您应始终使用with open() as ofile:
语法执行文件IO,以确保文件已正确刷新/关闭:
if options.out_arg:
with open(options.out_33, 'a') as outputfh:
outputfh.write(...)
else:
...
当然,所有这些都假设您实际上在某处调用 print_output
,而您的代码并未显示。并且options.out_33
是一个相对路径,而不是绝对路径,否则文件不会在你期望的地方结束。