zoukankan      html  css  js  c++  java
  • python被游标坑了

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

    #先创建个a.txt
    file_a = open('a.txt','w') #在当前目录下创建a.txt,写入模式,如果不确定目录先os.getcwd(),不然找不到不怪我哦
    file_a.write('3
    9
    5
    4
    ') #写入数据
    file_a.close()
    file_b = open('b.txt','w')
    for i in range(10):
      file_b.write(str(i)+'
    ') #写入1
    2
    3
    ....9
    
    file_b.close()
    
    #下面来读取匹配下
    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 x
          break
    #结果是3
    9
    ,只有3和9,这下懵逼了,应该是3
    9
    5
    4
    啊
    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')
    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 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 = open('b.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或二分法才是正确的选择,当然最快的一定是树查询
  • 相关阅读:
    黑客网银木马服务器曝光 14家银行网银遭监控 狼人:
    卡巴斯基实验室CE0来华启动卡巴斯基安全中国行 狼人:
    天清汉马UTM获“北京市自主创新产品”称号 狼人:
    IBM称欧亚受Conficker病毒感染最严重 狼人:
    卡巴斯基联手功夫巨星成龙 五月鸟巢开唱 狼人:
    微软4月14日起不再为所有XP用户提供安全补丁 狼人:
    卡巴斯基爱好者见面会 卡巴斯基先生与卡fans亲密互动 狼人:
    愚人节黑客以身试法 人民法院被挂马 狼人:
    微软:97%电子邮件属于垃圾邮件 狼人:
    4月3日 尤金.卡巴斯基在北大精彩演讲 狼人:
  • 原文地址:https://www.cnblogs.com/xiu123/p/8433878.html
Copyright © 2011-2022 走看看