加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python被游标坑了

发布时间:2020-12-17 00:10:09 所属栏目:Python 来源:网络整理
导读:为了方便,这次就不单独写脚本了,直接一步一步执行下来就好了先说下游标,就是一个指针,比如我有1234每条占一行,那么初始游标默认是在1的位置,当read(1)后,游标自动向下next,现在指在2的位置,依次类推,然后是3,4直到最后,除非强制移动游标,否则游

为了方便,这次就不单独写脚本了,直接一步一步执行下来就好了先说下游标,就是一个指针,比如我有1234每条占一行,那么初始游标默认是在1的位置,当read(1)后,游标自动向下next,现在指在2的位置,依次类推,然后是3,4直到最后,除非强制移动游标,否则游标不会再返回的今天写了一个脚本,具体就是有两个txt,a.txt和b.txt,从a.txt里面取值,去b.txt里面查看,是否存在,如果存在就把这条print出来上例子

file_a = open(,) file_a.write() = open(, i range(10+) <span style="color: #008000">#<span style="color: #008000">下面来读取匹配下
file_a = open(<span style="color: #800000">'
<span style="color: #800000">a.txt
<span style="color: #800000">'
,<span style="color: #800000">'
<span style="color: #800000">r
<span style="color: #800000">'
<span style="color: #000000">)
file_b
= open(<span style="color: #800000">'
<span style="color: #800000">b.txt
<span style="color: #800000">'
,<span style="color: #800000">'
<span style="color: #800000">r
<span style="color: #800000">'
<span style="color: #000000">)
<span style="color: #0000ff">for
x <span style="color: #0000ff">in
<span style="color: #000000"> file_a:
x
=<span style="color: #000000"> x.strip()
<span style="color: #0000ff">for
y <span style="color: #0000ff">in
<span style="color: #000000"> file_b:
y
=<span style="color: #000000"> y.strip()
<span style="color: #0000ff">if
x ==<span style="color: #000000"> y:
<span style="color: #0000ff">print
<span style="color: #000000"> x
<span style="color: #0000ff">break

<span style="color: #008000">#
<span style="color: #008000">结果是3n9n,只有3和9,这下懵逼了,应该是3n9n5n4n啊

<span style="color: #000000">file_a.close()
file_b.close()

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

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

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

<span style="color: #008000">知道原因在哪里就好办了,有两种办法,先说第一种把,用seek(0)将游标移动到开始

file_a = open(<span style="color: #800000">'<span style="color: #800000">a.txt<span style="color: #800000">',<span style="color: #800000">'<span style="color: #800000">r<span style="color: #800000">'<span style="color: #000000">)
<span style="color: #0000ff">for x <span style="color: #0000ff">in<span style="color: #000000"> file_a:
x =<span style="color: #000000"> x.strip()
<span style="color: #0000ff">for y <span style="color: #0000ff">in<span style="color: #000000"> file_b:
y =<span style="color: #000000"> y.strip()
<span style="color: #0000ff">if x ==<span style="color: #000000"> y:
<span style="color: #0000ff">print<span style="color: #000000"> x
file_b.seek(0)
<span style="color: #0000ff">break<span style="color: #000000">
file_a.close()
file_b.close()

<span style="color: #008000">#<span style="color: #008000">第二种是用readlines,把文件里的数据按行read成list,list是没有游标概念的,list只有下标,每次都会从头循环
file_a = open(<span style="color: #800000">'<span style="color: #800000">a.txt<span style="color: #800000">',<span style="color: #800000">'<span style="color: #800000">r<span style="color: #800000">'<span style="color: #000000">)
file_b_list = file_b.readlines() <span style="color: #008000">#<span style="color: #008000">只改file_b就可以了,因为a是主表
<span style="color: #0000ff">for x <span style="color: #0000ff">in<span style="color: #000000"> file_a:
x =<span style="color: #000000"> x.strip()
<span style="color: #0000ff">for y <span style="color: #0000ff">in<span style="color: #000000"> file_b_list:
y =<span style="color: #000000"> y.strip()
<span style="color: #0000ff">if x ==<span style="color: #000000"> y:
<span style="color: #0000ff">print<span style="color: #000000"> x
<span style="color: #0000ff">break<span style="color: #000000">
file_a.close()
file_b.close()
<span style="color: #008000">#<span style="color: #008000">我建议用第二种,因为第一种需要有游标重置的动作,虽然几条没有影响,不过如果是几千万的话影响应该会很大把,不过话说回来了,几千万谁还会用嵌套循环呢,hash或二分法才是正确的选择,当然最快的一定是树查询

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读