1

久しぶりにPythonで始めました:

基本的に私はファイルから行を読み取ろうとしています:

MY_FILE                     ='test1.hgx'

最終的に、このtest1.hgxを次のように変更したいと思います。

test1_para1_para2_para3.hgx

ここで、para1,23は私が書きたいパラメーターです。

以下にコードを書きました

add_name= '%s'%(filename)+'_'+'%s'%(para1)+'_'+'%s'%(para2)+'_'+'%s'%(para3)+'.hgx'
print "added_name:",add_name

with open(filename) as f:  lines = f.read().splitlines()
with open(filename, 'w') as f:
    for line in lines:
        if line.startswith(' MY_FILE'):

            f.write(line.rsplit(' ', 1)[0] + "\'%s'\n"%add_name)
        else:
            f.write(line + '\n')
f.close

上記のコードは期待どおりに機能し、Pythonコードを1回実行すると書き出されます。

MY_FILE                     ='test1_01_02_03.hgx'

ただし、Pythonコードをもう一度実行すると、「=」が消費され、次のように書き込まれます。

MY_FILE                     'test1_01_02_03.hgx'

'test1_01_02_03.hgx'の書き込みを常に保持する何かを既存のコードに追加できますか?私は問題があると思います:

f.write(line.rsplit(' ', 1)[0] + "\'%s'\n"%add_name)

しかし、私は問題を理解することができません。どんなアイデアも役に立ちます。ありがとう。

4

3 に答える 3

1

変化する:

        f.write(line.rsplit(' ', 1)[0] + "\'%s'\n"%add_name)

        f.write(line.rsplit('=', 1)[0] + "=\'%s'\n"%add_name)

ちなみに、元のファイルでは、?の後にスペースがなかったのは確か=ですか?の後にスペースがない場合=、このコードは常にを使い果たします=。スペースがある場合は、コードが2回実行されるまでスペースを使い果たしません。

于 2012-11-07T05:41:46.127 に答える
0

fileinputモジュールを使用してみてください。また、を使用format()して文字列に書き込みます。

# Using the fileinput module we can open a file and write to it using stdout.
import fileinput
# using stdout we avoid the formatting of print, and avoid extra newlines.
import sys

filename = 'testfile'
params = ['foo', 'bar', 'baz']
# Build the new replacement line.
newline = '{0}_{1}_(2)_{3}.hgx'.format(filename, params[0], params[1], params[2])

for line in fileinput.input(filename, inplace=1):
  if line.startswith('MY_FILE'):
     sys.stdout.write('MYFILE = {0}\n'.format(newline))
  else:
     sys.stdout.write(line)

MYFILEこれにより、次の行で始まる行が置き換えられます。MYFILE = 'testfile_foo_bar_baz.hgz

于 2012-11-07T05:41:54.383 に答える
0

に分割していますが' '、これはの前にありますが=、別のを追加していません=。これを行うには多くの方法がありますが、最も簡単な方法は、単に=バックを追加することです。

f.write(line.rsplit(' ', 1)[0] + "='%s'\n" % add_name)

もう1つの、よりクリーンな方法は、次を使用することreplaceです。

f.write(line.replace(filename, new_name))

余談ですが、最初の行は次のように書くことができます。

add_name = '%s_%s_%s_%s.hgx' % (filename, para1, para2, para3)
于 2012-11-07T05:44:37.093 に答える