从文件读取并检查列表中是否包含单词

时间:2018-11-21 14:49:17

标签: python list for-loop conditional

我妻子发短信给我杂乱无章的购物清单。我将她的列表粘贴到文本文件中。我想编写一个程序,该程序将删除她的无序列表并将有序列表写入该文件。 e.x.所有的水果在一起,肉在一起等等。显然,该程序尚处于起步阶段。在我的文本文件中,我写了:

banana
apple

在这种情况下,当我遍历文本文件的每一行时,我希望item被附加到水果上吗?但事实并非如此。我错过了什么?

fruit = []
vegetables = []
meat = []
dairy = []
fruit_list = ["banana", "apple", "orange"]

def read_list():
    with open("/storage/emulated/0/textfiles/grocery.txt", "r") as r:
        for item in r:
            if item in fruit_list:
                fruit.append(item)
    print(fruit)

2 个答案:

答案 0 :(得分:3)

您需要从文件中删除行尾,因为它们的末尾带有\n\r\n(Windows回车)。这意味着您正在比较bananabanana\n,这两个相等,导致没有附加任何内容。

您可以像下面这样预先使用str.strip()来解决此问题:

item = item.strip()
if item in fruit_list:
    # rest of code

或者您也可以使用str.rstrip()从右侧剥离:

item = item.rstrip()
if item in fruit_list:
    # rest of code

您还可以在使用map()进行迭代时剥离所有内容:

for item in map(str.strip, r):
    # rest of code

但是前两个解决方案很好。

答案 1 :(得分:2)

使用.rstrip()从行尾剪切'\ n'个符号

def read_list():
    with open("grocery.txt", "r") as r:
        for item in r:
            if item.rstrip() in fruit_list:
                fruit.append(item)
    print(fruit)

read_list()

您还可以使用item.rstrip().lower()检查以大写字母开头的项目