2017-05-20 53 views
1

我有了內容如下文本文件:如何查找和替換txt文件中的屬性?

#-------------------- INPUT -------------------- 
# file name- This is input file name 
-input_file 
2 
/home/useser/file_in1.txt 
/home/useser/file_in2.txt 
# Output file- this is output file 
-output_file 
2 
/home/useser/file_out1.txt 
/home/useser/file_out2.txt 

現在,我想通過/home/useser/file_in4.txt領域-input_file更換/home/useser/file_in1.txt通過/home/useser/file_in3.txt/home/useser/file_in2.txt。在字段-output_file中必須發生相同的過程。我正在使用Python 2.7,這是我試過的。但我不能達到預期的結果作爲

#-------------------- INPUT -------------------- 
# file name- This is input file name 
-input_file 
2 
/home/useser/file_in3.txt 
/home/useser/file_in4.txt 
# Output file- this is output file 
-output_file 
2 
/home/useser/file_out3.txt 
/home/useser/file_out4.txt 

我的Python代碼

if __name__ == "__main__": 
    input_file_3='/home/useser/file_in3.txt' 
    input_file_4 = '/home/useser/file_in4.txt' 
    out_file_3='/home/useser/file_out3.txt' 
    out_file_4 = '/home/useser/file_out4.txt' 
    f = open('input.txt', 'r') 
    for line in f: 
     if '-input_file' in line: 
      print line 

我怎麼能這樣做?由於

+1

當然你不能達到它:你甚至沒有試圖爲你的代碼只打印一些東西,但不會嘗試更改文件的內容。請顯示你的努力。 – ForceBru

回答

1

使用str.startwith()str.replace()功能的解決方案:

with open('input.txt', 'r+') as f: # open file in read/write mode 
    lines = iter(f.read().splitlines()) # cobverting list to iterator 
    f.seek(0) # reseting file pointer 
    for l in lines: 
     if l.startswith('-input_file'): 
      num = next(lines) 
      in1 = next(lines).replace('file_in1.txt', 'file_in3.txt') 
      in2 = next(lines).replace('file_in2.txt', 'file_in4.txt') 
      f.write('\n'.join([l, num, in1, in2]) + '\n') 
     elif l.startswith('-output_file'): 
      num = next(lines) 
      out1 = next(lines).replace('file_out1.txt', 'file_out3.txt') 
      out2 = next(lines).replace('file_out2.txt', 'file_out4.txt') 
      f.write('\n'.join([l, num, out1, out2]) + '\n') 
     else: 
      f.write(l + '\n') 

     f.truncate() 

input.txt內容:

#-------------------- INPUT -------------------- 
# file name- This is input file name 
-input_file 
2 
/home/useser/file_in3.txt 
/home/useser/file_in4.txt 
# Output file- this is output file 
-output_file 
2 
/home/useser/file_out3.txt 
/home/useser/file_out4.txt 
+0

感謝它運作良好。還有一件事我想問的是,我想根據'-input_file'編寫'/ home/useser/file_in3.txt'和'/ home/useser/file_in4.txt',而不是使用'/ home/useser/file_in1.txt'和'/ home/useser/file_in2.txt'作爲條件。你能幫我嗎? – KimHee

+0

@KimHee,是靜態文件的格式,是否總是隻有3行,後跟'-input_file'或'-output_file'? – RomanPerekhrest

+0

是的,它是靜態的。在'-input_file'後將編號爲'2',然後是兩個文件路徑。與'output_file'相同。另外,你並沒有將它保存在'lines.txt'中。請更新寫入文件。 – KimHee