Python 在大字符串中查找子字符串

Python 在大字符串中查找子字符串,python,Python,所以我的问题是,有太多的子字符串来检查这个庞大的字符串。我已经试着逐行读取文件,并对照行检查子字符串,但这仍然会使程序崩溃。是否有任何技术可以有效地针对非常大的字符串检查大量子字符串 上下文: 我正在执行数据检查,可疑数据保存到csv文件中,以供查看/更改。然后将此已审阅/更改的文件与原始文件进行比较。未更改的数据已验证为完好,必须保存到新的“例外文件”中。已更改和通过的数据将被忽略。已更改、已检查但仍然可疑的数据将再次发送以供审阅。您应该做的第一件事是将要搜索的60000个字符串列表转换为一个

所以我的问题是,有太多的子字符串来检查这个庞大的字符串。我已经试着逐行读取文件,并对照行检查子字符串,但这仍然会使程序崩溃。是否有任何技术可以有效地针对非常大的字符串检查大量子字符串

上下文:
我正在执行数据检查,可疑数据保存到csv文件中,以供查看/更改。然后将此已审阅/更改的文件与原始文件进行比较。未更改的数据已验证为完好,必须保存到新的“例外文件”中。已更改和通过的数据将被忽略。已更改、已检查但仍然可疑的数据将再次发送以供审阅。

您应该做的第一件事是将要搜索的60000个字符串列表转换为一个大正则表达式:

#read in csv file in form ("case, num, val \n case1, 1, baz\n...")
# convert to form FOO = "casenumval..." roughly 6 million characters
for someString in List: #60,000 substrings
    if substr not in FOO:
        #do stuff
    else: 
        #do other stuff
现在,您可以一次搜索所有对象:

如果你关心的只是知道找到了什么

for m in searcher.finditer(FOO):
    print(m.group(0))  # prints the substring that matched
这仍然比绝对最小值做了更多的工作,但是它应该比你以前做的更有效率

此外,如果您知道您的输入是CSV文件,并且您也知道要搜索的字符串中没有一个包含换行符,那么您可以逐行操作,这可能比您正在执行的操作快,也可能不快,具体取决于条件,但肯定会使用更少的内存:


如果
otherString
实际上是一个字符串,循环将迭代单个字符,而不是子字符串。您阅读了这个问题吗?如果你告诉我们“做事情”和“做其他事情”需要知道什么,这会有所帮助。例如,找到哪个子字符串重要吗,或者你只是在寻找其中的任何一个?你说“程序崩溃”。你能具体描述一下你的意思吗?我能理解为什么这会很慢,但不能理解为什么它会失败。需要使用字符串列表。谢谢你的回答,我会立即测试。
for m in searcher.finditer(FOO):
    print(m.group(0))  # prints the substring that matched
print(set(m.group(0) for m in searcher.finditer(FOO))
with open("foo.csv") as FOO:
    for line in FOO:
        for m in searcher.finditer(line):
            # do something with the substring that matched