Python嵌套for循环将数组元素中的字符串与文件匹配

Python嵌套for循环将数组元素中的字符串与文件匹配,python,file,for-loop,python-2.7,nested-loops,Python,File,For Loop,Python 2.7,Nested Loops,我的代码的目的是迭代数组中的每个元素,将元素转换为字符串,并从包含该字符串的另一个文件返回行。我的代码是: for element in myarray: elementstring=''.join(element) for line in myfile: if elementstring in line: print line 如果代码运行,它将只对第一个元素起作用。有人能解释一下为什

我的代码的目的是迭代数组中的每个元素,将元素转换为字符串,并从包含该字符串的另一个文件返回行。我的代码是:

    for element in myarray:
         elementstring=''.join(element)
         for line in myfile:
              if elementstring in line:
                  print line

如果代码运行,它将只对第一个元素起作用。有人能解释一下为什么会这样吗?

你浏览了一个文件。。。这会将指针移到末尾。。。您需要重新打开该文件或
myfile.seek(0)
。。。但是您的代码还有一些其他问题。如果不看到myarray,就很难回答这个问题,因为当你读一次文件的行时,你就到了文件的末尾,没有行可以读了。您需要关闭该文件并重新打开它,以便读取每个
元素

这里有一种方法:

for element in myarray:
    elementstring=''.join(element)
    with open('path/to/myfile') as myfile:
        for line in myfile:
            if elementstring in line:
                print line
或者,如果这是一个足够小的文件,您可以通过缓存文件中的行来减少运行时间,例如:

myfile = [line.rstrip('\n') for line in open('path/to/myfile')]
for element in myarray:
    elementstring=''.join(element)
    for line in myfile:
        if elementstring in line:
            print line

正如其他人所说,文件不是集合。文件是按顺序读取的,每次迭代都需要使用seek函数返回第一行

无论如何,这并不是你想要的最好的方式

从文件中读取通常比从RAM中读取慢(即使使用缓存),因此最好让主循环遍历文件

最好事先计算外部数组上的所有字符串值

最后,在一个文件(或更大的字符串)中搜索一组字符串的算法,你可以考虑。 以下是代码的优化版本:

strs = [' '.join(element) for element in myarray]
for line in open(''path/to/myfile'):
    for elementstring in strs:
         if elementstring in line:
              print line

什么是
myfile
?它是文件对象还是字符串数组?myfile是一个文件对象,使用myfile=open('location','r')打开。谢谢您的帮助。Myarray是:['IGHV1-18*01'],['IGHV1-18*02'],['IGHV1-18*03']]第一个示例有问题,因为它没有关闭文件,因此没有释放与操作系统相关的资源。考虑使用with语句或手动关闭文件之后的for循环。啊,是的,第一个例子工作得很好!非常感谢你,小玩意探长。还有沙丘,谢谢你的建议@沙丘:编辑为使用
修复。这将杀死循环末尾的文件指针我明白了,谢谢你的解释!我是python新手,不知道这一点。
strs = [' '.join(element) for element in myarray]
for line in open(''path/to/myfile'):
    for elementstring in strs:
         if elementstring in line:
              print line