0

あるファイル タイプを別のファイル タイプに変換する Python スクリプトを作成しようとしています。出力ファイルを指定するオプションが必要ですが、デフォルトでは、デフォルトのファイル名の拡張子を変更するだけです。

convert('foo.gb')例: を出力したいfoo.faaconvert('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])

そのため、出力が指定されているかどうかを確認し、指定されていない場合は、正規表現を使用して入力ファイル名を正しい拡張子に変更します。このコードは機能しますが、やや雑であるか、少なくともあまり読みにくいように見えます。.ファイル名が拡張子の前以外の場所にある場合も壊れます。

これを行うより良い方法はありますか?

4

2 に答える 2

2

Python のインストールには、友好的な人々によって提供されたバッテリーを使用してください。os.path特にsplittextを見てください。

次に、次のように記述できます。

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

アプリケーションでは、パス構造に注意する必要があります。ディレクトリ区切り文字を含まないファイル名でのみ上記の関数を使用したいと思います。

于 2015-02-12T18:14:26.577 に答える
1
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))
于 2015-02-12T18:14:06.290 に答える