2

次の行を含むファイルがあります。

info face="asd" size=49 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=0,0
common lineHeight=52 base=43 scaleW=128 scaleH=128 pages=1 packed=0
page id=0 file="asd.png"
chars count=9
char id=32 x=58 y=82 width=0 height=0 xoffset=0 yoffset=40 xadvance=9 page=0 chnl=0
char id=179 x=34 y=42 width=28 height=38 xoffset=2 yoffset=6 xadvance=26 page=0 chnl=0
char id=181 x=94 y=2 width=28 height=38 xoffset=2 yoffset=6 xadvance=26 page=0 chnl=0
char id=183 x=2 y=42 width=30 height=38 xoffset=2 yoffset=6 xadvance=27 page=0 chnl=0
char id=185 x=2 y=2 width=30 height=38 xoffset=2 yoffset=6 xadvance=27 page=0 chnl=0
char id=187 x=64 y=2 width=28 height=38 xoffset=2 yoffset=6 xadvance=26 page=0 chnl=0
char id=189 x=34 y=2 width=28 height=38 xoffset=2 yoffset=6 xadvance=26 page=0 chnl=0
char id=191 x=34 y=82 width=22 height=36 xoffset=2 yoffset=8 xadvance=18 page=0 chnl=0
char id=193 x=2 y=82 width=28 height=38 xoffset=2 yoffset=6 xadvance=26 page=0 chnl=0
kernings count=0

値を見つけてからid、単純な条件に基づいて、その数値を変更 (値から数値を加算/減算) し、ファイルを書き戻す必要があります。私の試みは:

input = open('file.txt', 'r')
for line in input: 

char id=ここでは、 line 、 value 、および残りの行の3 つの部分をキャプチャすることを考えています。次に、値を変更して新しい文字列を作成します。しかし、それがPythonで効果的な方法であるとは思えません。また、ファイルの内容を変更するために、新しいファイルを作成し、古いファイルを削除して古い名前に名前を変更する代わりに、同じファイルで作業する方法があるかどうかもわかりません。

4

1 に答える 1

4

ファイルを置き換える必要があります(そのため、一時ファイルに書き込みます)。ただし、fileinputモジュールを使用すると、これが簡単になります。

import fileinput
import sys

for line in fileinput.input(filename, inplace=True):
    if line.startswith('char id='):
        _, id_, rest = line.split(None, 2)
        id_ = int(id_.split('=')[1])
        id_ += 1  # adjust as needed
        line = 'char id={} {}'.format(id_, rest)

    sys.stdout.write(line)

この例では、id値を 1 ずつインクリメントするだけです。コードを調整して、id_整数で必要なことを行うことができます。

を指定するinplace=Trueと、fileinputモジュールは元のファイルをバックアップに移動し、書き込み先をキャプチャしてstdout、代わりに元のファイルの場所に書き込みます。

于 2013-05-22T21:25:49.083 に答える