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