2012-07-11 45 views
0

因此,當我分別寫這段代碼時,它工作正常,但是當我將它們組合在一起時,它會給我typeError。爲什麼會發生?我不明白,當我分別寫他們,它工作正常。在此先感謝:)類型錯誤需要字符串或緩衝區,在Python中找到的文件

def printOutput(start, end, makeList): 

    if start == end == None: 

     return 

    else: 

     print start, end 

     with open('OUT'+ID+'.txt','w') as outputFile:#file for result output 
      for inRange in makeList[(start-1):(end-1)]: 
       outputFile.write(inRange) 
      with open(outputFile) as file: 
       text = outputFile.read() 
     with open('F'+ID+'.txt', 'w') as file: 
     file.write(textwrap.fill(text, width=6)) 

回答

5

你的問題是在這條線:

with open(outputFile) as file: 

outputFile是一個文件對象(已打開)。 open函數需要一個字符串(或類似的東西),它是要打開的文件的名稱。

如果您想要取回文字,可以再次使用outputFile.seek(0),然後再使用outputFile.read()。 (當然,你必須在r+模式打開這個工作)

也許一個更好的方式來做到這一點是:

with open('OUT'+ID+'.txt','w') as outputFile:#file for result output 
    text=''.join(makeList[(start-1):(end-1)]) 
    outputFile.write(text) 
with open('F'+ID+'.txt', 'w') as ff: 
    ff.write(textwrap.fill(text, width=6)) #Version of above file with text wrapped to 6 chars. 

編輯

這應該工作:

def printOutput(start, end, makeList): 
    if start == end == None: 
     return 
    else: 
     print start, end 

     with open('OUT'+ID+'.txt','w') as outputFile:#file for result output 
      text=''.join(makeList[(start-1):(end-1)]) 
      outputFile.write(text) 
     with open('F'+ID+'.txt', 'w') as ff: 
      ff.write(textwrap.fill(text, width=6)) #Version of above file with text wrapped to 6 chars. 
+0

seek()裏面的數字是什麼意思,你是說我應該使用open(outputFile,'r +)作爲dile和outputFile.seek(0)和outputFile.read() – 2012-07-11 18:26:53

+0

查找內部的數字('0')是文件位置。在這種情況下,0是文件的開始。是的,我的意思是使用open(outputFile,'r +)',而不是去尋找,看看我更新的答案,它將所有文本放在一起,然後一次性寫入,保留對' textwrap' – mgilson 2012-07-11 18:28:40

+0

我想我的目標是編寫文件並對其進行格式化,以便每行只有6個字符 – 2012-07-11 18:29:22

相關問題