无法在列表中找到使用csv reader读取的特定字符串?

时间:2018-05-07 10:39:38

标签: python python-3.x

我正在阅读单词列表(dict)并试图找出列表中是否有特定单词。这是代码:

    dict = []
    with open('words.txt', newline='') as inputfile:
        for row in csv.reader(inputfile):
            dict.append(row)

    print('hello' in dict)

我知道hello在列表dict中,但最后一行代码返回False。

如果我输入以下代码,它会给出True,所以它必须与它的读取方式有关:

    dict=['hel','hello','heo','sds','sdswe']
    print('hello' in dict)

任何想法??

2 个答案:

答案 0 :(得分:0)

原因在于您要附加 .txt 文件中的列表而不是字符串,最后列出的是列表而不是您想要的列表字符串

csv.reader所做的是它以列表的形式读取 .txt 文件的内容。

因此,例如,如果.txt文件有

Your
Name

csv.reader会像这样解释:

[['Your'], ['Name']]

因此是列表而不是字符串列表。

所以,如果你想要一个字符串列表,你可以这样做:

yourlist.append(row[0].strip()) #striping will remove the newline

这将为您提供行的元素,而不是列表本身。如果这有助于你,请告诉我。

最后,这就是你可以拥有的:

yourlist = []
with open('words.txt', newline='') as inputfile:
    for row in csv.reader(inputfile):
        yourlist.append(row[0].strip())
print('hello' in yourlist)

答案 1 :(得分:0)

您的代码存在两个主要问题:

  1. 永远不要在课程后命名变量,例如使用lst代表列表而不是dict
  2. row返回一个列表,而您只需要每个row实例中的第一个条目;即使用row[0]
  3. 以下代码演示了第二个问题。如果有疑问,请使用print(type(row))查看您正在使用的对象类型。

    import csv
    from io import StringIO
    
    csvstr = StringIO("""hel
    hello
    heo
    sds
    sdswe
    """)
    
    lst = []
    
    for row in csv.reader(csvstr):
        print(type(row))  # <class 'list'>
        lst.append(row[0])
    
    print('hello' in lst)  # True