zoukankan      html  css  js  c++  java
  • python 文件单行循环读取的坑(一个程序中,文件默认只能按行循环读取一次,即使写到另一个循环里,它也只读取一次)

    本来写了一个程序,想获取a文件中有,但是b文件中没有的行;

    想到的方法是:1.一行一行提取a文件中数据,然后用a文件中的每一行与b文件中的每一行比较,

                           2.如果找到相同行就继续查找a中的下一行,如果找不到,就把这行保存起来,就是要找的一行

    程序写成如下:

    f = open("file/a.txt","r",newline='
    ')
    ff= open ("file/aa.txt","r",newline='
    ')
    new=open ("file/a1.txt",'w')
    for line in f:
        flag= 0
        for line1 in ff:
            if line == line1:
               flag=1
               break
            else: continue
        if flag ==0:
            new.write(line)
    f.close()
    ff.close()
    new.close()

    然后就运行,结果就发现了一个奇怪的现象:如果a中的最后几行在b中找不到,那么结果是对的

                                                                           如果a中的第一行,或者中间行在b中找不到,那结果就是错的

    找错:我每一行都打了断点,最后发现,第一个循环内的文件遍历只遍历一次:即ff对象只遍历一次;无论外围循环是否重新开始,循环内的文件遍历只走一次

              所以如果第一行找不到,内部循环会将行保留在ff文件的最后一行,而不是重新开始,所以出错

    解决:在内部的循环层外,加ff.seek(0),将指针指回文件头即可

    f = open("file/a.txt","r",newline='
    ')
    ff= open ("file/aa.txt","r",newline='
    ')
    new=open ("file/a1.txt",'w')
    for line in f:
        flag= 0
        ff.seek(0)
        for line1 in ff:
            if line == line1:
               flag=1
               break
            else: continue
        if flag ==0:
            new.write(line)
    f.close()
    ff.close()
    new.close()

                                                                   

  • 相关阅读:
    查看Sql Server2016 是否激活
    MSSQL 账户访问视图权限的设置
    Vue 前端验证码
    (攻防世界) -- pwn入门 -- 新手区1 -- CGfsb
    .NET Core自动注册服务
    C# Graphics 生成文字圆形头像
    Codeforces Round #729 (Div. 2) C. Strange Function
    Codeforces Round #710 (Div. 3) ABCDE 题解
    Codeforces Round #708 (Div. 2) ABC1C2题解
    Codeforces Round #706 (Div. 2) D. Let's Go Hiking 博弈 思维
  • 原文地址:https://www.cnblogs.com/mghhzAnne/p/10368918.html
Copyright © 2011-2022 走看看