如果包含列表中的字符串,则跳过 CSV 中的行

我有一个大约 500 个字符串的列表,我想对照包含 25,000 行的 CSV 文件检查这些字符串。我目前所拥有的似乎陷入循环。如果该行包含我的字符串列表中的任何字符串,我基本上想跳过该行,然后提取其他数据。


stringList = [] #strings look like "AAA", "AAB", "AAC", etc.


with open('BadStrings.csv', 'r')as csvfile:

    filereader = csv.reader(csvfile, delimiter=',')

    for row in filereader:

        stringToExclude = row[0]

        stringList.append(stringToExclude)


with open('OtherData.csv', 'r')as csvfile:

    filereader = csv.reader(csvfile, delimiter=',')

    next(filereader, None) #Skip header row

    for row in filereader:

        for s in stringList:

            if s not in row:

                data1 = row[1]

编辑:不是无限循环,但循环时间太长。


慕村9548890
浏览 117回答 2
2回答

噜噜哒

根据 Niels 的说法,我会更改 2 循环并遍历行本身并检查当前行条目是否在“坏”列表中:for row in filereader:    for s in row:       if s not in stringlist:           data1 = row[0]而且我也不知道您想对 data1 做什么,但是当项目不在 stringList 中时,您总是会更改对象引用。您可以使用列表将项目添加到列表中data1.append(item)

叮当猫咪

你可以尝试这样的事情。stringList = [] #strings look like "AAA", "AAB", "AAC", etc.with open('BadStrings.csv', 'r')as csvfile:    filereader = csv.reader(csvfile, delimiter=',')    for row in filereader:        stringToExclude = row[0]        stringList.append(stringToExclude)data1 = [] # Right now you are overwriting your data1 every time. I don't know what you want to do with it, but you could for exmaple add all row[1] to a list data1with open('OtherData.csv', 'r')as csvfile:    filereader = csv.reader(csvfile, delimiter=',')    next(filereader, None) #Skip header row    for row in filereader:        found_s = False        for s in stringList:            if s in row:                found_s = True                break        if not found_s:            data1.append(row[1]) # Add row[1] to the list is no element of stringList is found in row. 仍然可能不是一个巨大的性能改进,但至少 for 循环for s in stringList:现在会在找到 s 后停止。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python