1

そのため、製品名、ライセンス参照通知、著作権情報などを含むコメントヘッダーを上部に必要とするPythonファイル(実際には数百)がたくさんあります。バッチのような方法でこれを行うための最良の方法は何ですか?言い換えると、ヘッダーを指定するために使用できるツールと、*。pyフィルターまたはそれらの行に沿った何かとともにこのヘッダーを適用するディレクトリはありますか?ちなみに、すべてのヘッダー情報はすべてのファイルで同一です。

4

4 に答える 4

5

Bashバッチ構文:

for i in `find {DIRECTORY} -name "*.py"`; do
    cat - $i > /tmp/f.py <<EOF
{HEADER_BLOCK}
EOF
    mv /tmp/f.py $i
done
于 2012-12-10T00:22:05.220 に答える
1

実際に python 自体を使用して、pythonic の方法に従うことができます。

ファイルの先頭または末尾にテキストを追加するには、次を使用します。

with open('filename.py','rb') as f:
    text = f.read()
    text = prependText + text
    text = text + postText
    // whatever you want to manipulate with the code text
with open('filename.py','wb') as f:
    f.write(text)

通常、Python モジュールはツリー構造を示すため、いつでもwalk関数 ( os.path.walk ) を使用して任意の深さのレベルに移動し、パスやファイル名に従って任意のカスタム ロジックを適用できます。

于 2012-12-10T01:20:09.897 に答える
1

バッチ アプローチの代わりに python 自体を使用する場合は、非常に単純化されたバージョンを次のように記述できます。

import os, sys

def main():
    HEADER = '''# Author: Rob
# Company: MadeupOne
# Copyright Owner: Rob
'''

    filelist = []
    for path, dir, files in os.walk(sys.argv[1]):
        for file in files:
            if file.endswith('.py'):
                filelist.append(path + os.sep + file)

        for filename in filelist:
            try:
                inbuffer = open(filename, 'U').readlines()
                outbuffer = [HEADER] + inbuffer

                open(filename, 'wb').writelines(outbuffer)
            except IOError:
                print 'Please check the files, there was an error when trying to open %s...' % filename
            except:
                print 'Unexpected error ocurred while processing files...'

if __name__ == '__main__': main()

変更したいファイルを含むディレクトリを渡すだけで、パス上のすべての .py ファイルに再帰的に HEADER が追加されます。

于 2012-12-10T01:20:28.243 に答える