2014-12-13 37 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) 

也许在这一点上,你会想问为了另一个问题基于一些其他特色,以减少剩余的条目。您应该将主循环设计为一个循环,而不是创建一个长时间重复的程序,该程序一次只需要一个功能。当你留下一个条目时,你可以停止循环(或者如果你最终得到零条目,你没有猜到)。

对于它的价值,你的特征表示似乎不太理想,但因为你没有描述它,这仅仅是一个快速的印象。 (如果你至少简要描述了程序的相关部分,你可以得到更好的答案。)