python 游标_python被游标坑了

file_a = open(,) file_a.write() = open(,i range(10+) #下面来读取匹配下

file_a = open('a.txt','r')

file_b= open('b.txt','r')for x in file_a:

x= x.strip()for y in file_b:

y= y.strip()if x == y:print xbreak

#结果是3\n9\n,只有3和9,这下懵逼了,应该是3\n9\n5\n4\n啊

file_a.close()

file_b.close()

#结果这破玩意我改了一个小时,怎么都是3,然后觉得这样没有啥效果,仔细想了一下,原来是游标的问题,尼玛的

我来解释下,因为file_a的类型是file,而file类型是使用指针的,就是和我上面说的一样,除非强制移动,否则游标不会再返回的

就是说在嵌套循环里面for y in file_b的时候匹配到3了,那么游标停在3上,下一个是9,那么第二轮是从3开始向下找,找到9,9之后就再没有了,所以无论怎么匹配也匹配不到的

知道原因在哪里就好办了,有两种办法,先说第一种把,用seek(0)将游标移动到开始

file_a = open('a.txt','r')

for x in file_a:

x = x.strip()

for y in file_b:

y = y.strip()

if x == y:

print x

file_b.seek(0)

break

file_a.close()

file_b.close()

#第二种是用readlines,把文件里的数据按行read成list,list是没有游标概念的,list只有下标,每次都会从头循环

file_a = open('a.txt','r')

file_b_list = file_b.readlines() #只改file_b就可以了,因为a是主表

for x in file_a:

x = x.strip()

for y in file_b_list:

y = y.strip()

if x == y:

print x

break

file_a.close()

file_b.close()

#我建议用第二种,因为第一种需要有游标重置的动作,虽然几条没有影响,不过如果是几千万的话影响应该会很大把,不过话说回来了,几千万谁还会用嵌套循环呢,hash或二分法才是正确的选择,当然最快的一定是树查询

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值