2012-08-16 76 views
0

我有一個文件中的術語列表,我想讀取,修改每個術語並將新術語輸出到新文件。新術語應該如下所示:將原始術語的前兩個字符放在引號中,添加'=>',然後用引號和逗號添加原始術語。Python:讀取文件 - 修改行 - 寫入輸出

這是我正在使用的代碼:

def newFile(newItem): 
    original = line 
    first = line[0:2] 
    newItem = first+'=>'+original+',' 
    return newItem 
input = open('/Users/george/Desktop/input.txt', 'r') 
output = open('/Users/george/Desktop/output.txt', 'w') 
collector = '' 
for line in input: 
    if len(line) != 0: 
     collector = newFile(input) 
     output.write(''.join(collector)) 
    if len(line) == 0: 
     input.close() 
output.close() 

例如: 如果input.txt的文件的術語是這些: 術語1 術語2 術語3 術語4

輸出是這樣的:

te=>term 1 
,te=>term 2 
,te=>term 3 
,te=>term 4  
, 

如何添加''前兩個字母和期限?爲什麼第二,第三和第四項有,te而不是te就像它應該那樣?

回答

3

而不是使用collectornewFile()你可以使用新的變量:

modified_line = "'%s'=>'%s'," % (line[:2], line.strip()) 

,並在循環試試這個:

... 
if len(line) > 2: 
    output.write('%s\n' % (modified_line)) 

另外:

  • 如果可能的話不要硬程序中的代碼文件名,使用sys.argv,標準輸入/輸出或c onfig文件;當然,如果你確信輸入/輸出名稱然後用它們
  • line[0:2]可以ommit 0和使用線[:2]
  • 你應該使用try: - 打開文件 - 讀文件等finally:關閉文件
  • 你不「T需要檢查,如果len(line) == 0for循環做它已經,您將收到符合CRLF空行,但輸入文件的到底是什麼時候for循環結束
+0

,完美的工作,感謝您的回答和解釋! – 2012-08-16 11:50:21