关于python:写出来没有给出新文件,但也没有错误

Writing out to a gives no new file, but no error either

目标:

  • 接受argparse中的参数,
  • 测试这个论点是否正确
  • 如果为true,则使用该参数后面指定的名称编写文件
  • 如:在命令行中:

    $ python printfile.py --out_arg fileOutput.txt

    …将在与printfile.py相同的目录中生成fileoutput.txt

    代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    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("@{}
    {}
    {}
    +"
    .format(seqID, seq, comm))
        else:
            sys.stderr.write("ERR: sys.stdin is without sequence data")

    但是,当我从def main()调用print_output时——未显示——传入我感兴趣的元组(seqid、seq、comm),没有写入任何文件,也没有给出任何错误消息。argparse参数是否没有将输入的文件存储为dest?尝试写入时是否使用文件句柄?


    您从不在输出文件上调用close。python的写操作在一定程度上得到了缓冲,如果你不调用flushclose,那么你就不能保证在文件中有所有的输出(或者短文件中有一个文件)。

    您应该始终使用with open() as ofile:语法执行文件IO,以确保文件正确刷新/关闭:

    1
    2
    3
    4
    5
    if options.out_arg:
        with open(options.out_33, 'a') as outputfh:
            outputfh.write(...)
    else:
        ...

    当然,所有这些都假定您实际上是在某个地方调用print_output,而您的代码没有显示这个地方。而且,options.out_33是一个相对路径,而不是绝对路径,否则文件将不会像您期望的那样结束。