使默认输出文件依赖于输入fi

2024-06-16 14:30:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个python脚本,将一种文件类型转换为另一种文件类型,我希望可以选择指定一个输出文件,但默认值是只更改默认文件名的扩展名。你知道吗

例如:我想convert('foo.gb')输出foo.faa,但是convert('foo.gb', 'bar.faa')输出bar.faa

我实现这一点的方式是:

#!/usr/bin/env python

def convert(inputFile, outputFile = None):
    [code that converts data]

    if not outputFile:
        import re
        name = re.match('(.+)\.\w+', inputFile)
        outputFile = './{0}.faa'.format(name.group(1))

    with open(outputFile, 'w+') as outFaa:
        outputFaa.write([stuff to write])

因此,它检查是否指定了输出,如果没有,则使用正则表达式更改输入文件名以获得正确的扩展名。这段代码可以工作,但似乎有点草率,或者至少不太可读。如果文件名在扩展名之前的任何地方都有.,那么它也会中断,而扩展名有时可能有。你知道吗

有没有更好的办法?你知道吗


Tags: 文件namere脚本convertfoo文件名方式
2条回答

请使用友好人士在Python安装中提供的电池。看看os.path,尤其是splitext。你知道吗

你可以这样写:

def convert(filename, changeto=None):
    basename, ext = os.path.splitext(in)
    if changeto is None:
        return basename + ".faa"
    return changeto

在应用程序中,需要注意路径结构。我只想对不包含目录分隔符的文件名使用上面的函数。你知道吗

import os

if output_fname is None:
    basename, ext = os.path.splitext(input_fname)
    output_fname = basename + ".faa"

参见https://docs.python.org/3.4/library/os.path.html上的文档

编辑:这还不错;我唯一真正想做的不同的事情是让输出文件名处理成为函数中的第一件事。这只会让下一个人更容易找到参数的来源以及如何正确使用它们:

import os
def convert(in_fname, out_fname = None):
    # start by sanitizing parameters
    if out_fname is None:
        basename, ext = os.path.splitext(in_fname)
        out_fname = basename + ".faa"

    # read data
    with open(in_fname) as inf:
        data = inf.read()   # or inf.readlines()

    # do conversion
    result = do_conversion(data)

    # write result
    with open(out_fname, "w") as outf:
        outf.write(result)  # or .write("\n".join(result))

相关问题 更多 >