2012-07-26 39 views
0

我有以下代碼將文本文件的一部分複製到新的臨時文件中。我正在嘗試在與正在複製的文件相同的目錄中創建臨時文件。所有的打印語句都會在崩潰之前查看它運行多遠,pdb打印1,然後在代碼下面給出屏幕上顯示的錯誤。在python中複製部分文本文件時的錯誤

def copymp(mptfile): 
    print 1 
    temp = os.path.dirname(mptfile) + '/mpdata.tmp' 
    print 2 
    mpfile = open(temp, 'w') 
    print 3 
    copyline = False 
    for line in mptfile: 
     print 4 
     if line.startswith('MP'): 
      copyline = True 
      print 5 
     if copyline: 
      print 6 
      print>>mpfile, line 
      copyline = False 
    mpfile.seek(1) 
    return None 

錯誤:http://i.imgur.com/fqfsi.jpg

+0

如果第四個print語句執行那麼多,那麼它會給你一個IndentationError。 – 2012-07-26 14:27:33

+1

我也很困惑你想要做什麼。爲什麼你將copyline設置爲true?你爲什麼不直接打印該行而不是有一個copyline變量? – 2012-07-26 14:29:05

+0

@RobVolgman:在代碼開始執行之前,編譯期間會發生縮進錯誤。 – 2012-07-26 14:31:32

回答

2

os.path.dirname()參數必須是一個字符串,但你顯然傳遞一個文件對象。 (這是打算?)嘗試

temp = os.path.dirname(mptfile.name) + '/mpdata.tmp' 

改爲。 (注意:你應該仔細觀察你所得到的回溯,跟蹤顯示錯誤發生在哪一行 - 不需要打印語句來隔離它,在這種情況下,你可以看到它是對os.path.dirname()即失敗,所以你應該檢查它的文檔來診斷問題。)

+0

編輯:魔術。謝謝! – zakparks31191 2012-07-26 14:21:57

0

嘗試在python中使用tempfile模塊。在原始文件所在的同一目錄中創建臨時文件很重要嗎?如果沒有,你可以約在您嘗試從文件對象獲取路徑,或使用線路忘記的建議:

temp = os.path.dirname(mptfile.name) + '/mpdata.tmp' 

不管怎樣,大部分的時間你不想自己管理臨時文件,這是爲什麼python的tempfile模塊存在。