2014-12-13 76 views
0

在猜測某人在學校的遊戲並找不到從.txt文件中刪除一行的方法。我不斷收到以下錯誤:從.txt文件中刪除一行時出錯

<_io.TextIOWrapper name='characters.txt' mode='r' encoding='cp1252'> 
<_io.TextIOWrapper name='characters.txt' mode='r' encoding='cp1252'> 
<_io.TextIOWrapper name='characters.txt' mode='r' encoding='cp1252'> 

下面是代碼:

information = open("characters.txt","r") 

hair = input("Does your character have black hair?") #Asks for input under variable name hair 
if hair == "yes": 
    for line in lines: #Breaks it down into individual lines 
     if line.split(',')[1] == "Black hair":   
      lines.remove(line) 
     print(information) 
+1

這看起來不像是一個錯誤消息。你如何以及在哪裏計算變量'information'的值?請修改您的問題以包含所有相關信息(並根據具體情況刪除不相關的信息)。 – tripleee 2014-12-13 18:40:24

+0

好吧,我終於修好了,但現在它跳過一行,所以不刪除。例如,如果在.txt文件中另一頭棕色頭髮上有棕色頭髮,那麼它只會刪除其中的一個? – 2014-12-14 01:26:05

+0

接受這裏的答案之一(如果你不喜歡其他人並解釋你是如何修復的話,請發表你自己的答案)。用您的新代碼和新問題發佈一個新問題。包括一個鏈接到這個背景。 – tripleee 2014-12-14 07:02:58

回答

1

這是不是一個錯誤。它是一個開放的文件對象的字符串表示:

>>> open('a.txt') 
<_io.TextIOWrapper name='a.txt' mode='r' encoding='cp1252'> 
>>> 

如果您想打印文件的內容,您將需要調用它的read方法:

print(information.read()) 

read方法將讀取所有文件的內容都放入一個字符串中。但是,如果您只想要一行,請使用readline方法。

0

你可能不希望打印information但它並不完全清楚你想打印什麼。

features = dict() 
with open("characters.txt","r") as information: 
    for line in information: 
     _, haircolor = line.split(',') 
     features[haircolor] = line 

hair = input("Does your character have black hair?") 
if hair == "yes": 
    for entry in features['Black hair']: 
     print 'Character could be {}'.format(entry) 

也許在這一點上,你會想問爲了另一個問題基於一些其他特色,以減少剩餘的條目。您應該將主循環設計爲一個循環,而不是創建一個長時間重複的程序,該程序一次只需要一個功能。當你留下一個條目時,你可以停止循環(或者如果你最終得到零條目,你沒有猜到)。

對於它的價值,你的特徵表示似乎不太理想,但因爲你沒有描述它,這僅僅是一個快速的印象。 (如果你至少簡要描述了程序的相關部分,你可以得到更好的答案。)