两个for循环,第二个仅在第一次迭代python上执行
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了两个for循环,第二个仅在第一次迭代python上执行,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1717字,纯文字阅读大概需要3分钟。
内容图文
![两个for循环,第二个仅在第一次迭代python上执行](/upload/InfoBanner/zyjiaocheng/690/33090f36dc1248d380628aeeb053ed5e.jpg)
我是python noob,我正在尝试比较两个文件中各行之间的值,并输出“行名”,如果第二行中有该行,则输出1,如果第二个文件中缺少该行,则输出0.第一次迭代返回1,因为该行在第二个文件中,但对于> 1,000行,无论它们是否在第二个列表中,它们都返回0.似乎第二个“ for循环”仅在第一次迭代时执行.有什么想法吗?这是我的代码:
import sys
file1 = sys.argv[1]
file2 = sys.argv[2]
name = str(file2)
f1 = open(file1, 'r')
f2 = open(file1, 'r')
o1 = open((name + '1.txt'), 'w')
for line in f1:
name = line.strip('\r\n')
count = 0
for line1 in f2:
if name == line1.strip('\r\n'):
count += 1
print (str(name) + '\t' + str(1))
o1.write(str(name) + '\t' + str(1) + '\r\n')
if count == 0:
print (str(name) + '\t' + str(0))
o1.write(str(name) + '\t' + str(0) + '\r\n')
f1.close()
f2.close()
o1.close()
Any help is very much appreciated!
进行一些更改后,这就是我所拥有的,它仅返回“ 1”
f1 = open(file1, 'r') #opens files for reading
f2 = open(file2, 'r')
o1 = open((name + '1.txt'), 'w')
f2s = {line.strip('\n') for line in f2}
for line in f1:
line = line.strip('\n')
count = 0
if line in f2s:
count += 1
print (str(line) + '\t' + str(1))
o1.write(str(line) + '\t' + str(1) + '\n')
if count == 0:
print (str(line) + '\t' + str(0))
o1.write(str(line) + '\t' + str(0) + '\n')
尴尬的是,我两次打开相同的文件.最佳新秀.
解决方法:
f2是第二个文件的迭代器,当读取它时,它就被耗尽.
您可以重置迭代器f2.seek(0,0),但这并不是最好的方法.
最好将f2中的所有值放入集合中,然后仅对f1进行一次迭代:
f2s = {line.strip('\n') for line in f2}
for line in f1:
name = line.strip('\n') # No need for \r\n
if name in f2s:
# etc.
如果您需要计算f2中f1中每行的出现次数,则可以使用Counter:
from collections import Counter
f2c = Counter(line.strip('\n') for line in f2)
for line in f1:
name = line.strip('\n')
if name in f2c:
count = f2c[name]
内容总结
以上是互联网集市为您收集整理的两个for循环,第二个仅在第一次迭代python上执行全部内容,希望文章能够帮你解决两个for循环,第二个仅在第一次迭代python上执行所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。