Python 写入文件并维护语法

Python 写入文件并维护语法,python,Python,很长一段时间后开始使用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' pri

很长一段时间后开始使用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)
然而,我无法找出问题所在。任何想法都会有帮助。谢谢。

更改:

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

顺便问一下,您确定在原始文件中,
=
后面没有空格吗?如果
=
后面没有空格,则此代码将始终占用
=
。如果有空格,则在第二次运行代码之前,它不会将其用完。

更改:

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


顺便问一下,您确定在原始文件中,
=
后面没有空格吗?如果
=
后面没有空格,则此代码将始终占用
=
。如果有空间,则在第二次运行代码之前,它不会占用空间。

尝试使用
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\u foo\u bar\u baz.hgz

尝试使用
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\u foo\u bar\u baz.hgz

行,该行位于
=
之前,但不添加另一行
=
。有很多方法可以做到这一点,但最简单的方法可能是简单地将
=
添加回:

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)

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

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)

非常感谢。是的,在原始文件中,在“=”后面有一个空格。不过,你的建议解决了问题。谢谢。是的,在原始文件中,在“=”后面有一个空格。然而,你的建议解决了问题。