使用csv reader读取列表后,无法检测到特定字符串的问题排查
问题原因及解决办法
嘿,我来帮你搞懂这个问题~
你遇到的核心问题在于**csv.reader的返回值类型**:当你用csv.reader读取文件时,每一行的row其实是一个列表——哪怕你的文件里每行只有一个单词,它也会被包装成一个长度为1的小列表(比如['hello'])。
而你之前的代码是直接把row追加到dict里,这就导致你的dict列表里装的不是单个字符串,而是一个个小列表。这时候执行'hello' in dict,Python会检查字符串'hello'是不是dict的直接元素,但dict里的元素全是列表,自然匹配不到,所以返回False。
对比你手动写的测试代码dict=['hel','hello','heo','sds','sdswe'],这里的元素都是字符串,所以'hello' in dict能正确匹配,返回True。
解决办法
这里给你两个简单的修复方案:
提取列表中的字符串元素
在追加的时候,取row的第一个元素(也就是你要的单词),同时注意不要用dict当变量名(会覆盖Python内置的字典类型):import csv # 记得先导入csv模块 word_list = [] with open('words.txt', newline='') as inputfile: for row in csv.reader(inputfile): if row: # 跳过可能存在的空行,避免索引报错 word_list.append(row[0]) print('hello' in word_list)用更简洁的方式读取(适合单行单单词的场景)
如果你的文件确实每行只有一个单词,也可以不用csv.reader,直接按行读取并处理:word_list = [] with open('words.txt', 'r') as inputfile: for line in inputfile: word = line.strip() # 去掉换行符和前后空白 if word: # 跳过空行 word_list.append(word) print('hello' in word_list)
这样修改后,你的word_list里就都是字符串了,'hello' in word_list就能正确返回True啦~
内容的提问来源于stack exchange,提问作者Darragh
相关产品推荐
相关产品推荐

