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

2024-10-03 13:25:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大约500个字符串的列表,我想检查一个包含25000行的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]

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


Tags: csvcsvfile字符串in列表foraswith
2条回答

根据Niels的说法,我将更改2循环并遍历行本身并检查当前行条目是否在“bad”列表中:

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 data1
with 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后停止。在

相关问题 更多 >