2012-11-07 79 views
1

很長一段時間後:寫入文件和維護入門蟒蛇語法

基本上我想從文件中讀取一行:

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代碼一次:當我再次對運行Python代碼

MY_FILE      ='test1_01_02_03.hgx' 

然而它吃了「=」和第二次寫入以下內容:

MY_FILE      'test1_01_02_03.hgx' 

我可以添加對我現有的代碼總是保留'test1_01_02_03.hgx'的寫法。我認爲有問題:

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

但是我無法弄清楚問題所在。任何想法都會有所幫助。謝謝。

回答

1

變化:

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

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

順便說一句,你確定是在原來的文件,有沒有=後的空間?如果在=之後沒有空格,則此代碼將始終吃掉=。如果有空間,那麼在代碼運行第二次之前它不會吃掉它。

+0

謝謝。在原始文件中是「=」後面有一個空格。然而,你的建議解決了這個問題。 – user741592

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

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)