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 代码时写出:

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)

顺便说一句,您确定在原始文件中, ? 后面没有空格=?如果后面没有空格=,这段代码总是会吃光的=。如果有空间,它不会吃掉它,直到第二次运行代码。

于 2012-11-07T05:41:46.127 回答
0

您正在拆分' ',它在 之前=,但没有添加另一个=。有很多方法可以做到这一点,但最简单的可能是简单地添加=后面:

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

另一种更清洁的方法是使用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 回答
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)

这应该替换以该行开头的任何MYFILEMYFILE = 'testfile_foo_bar_baz.hgz

于 2012-11-07T05:41:54.383 回答