标题:自己写的求两个文件不同行python,速度很慢,求大神指点一下
只看楼主
liyibo0719
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2019-8-6
结帖率:66.67%
已结贴  问题点数:20 回复次数:8 
自己写的求两个文件不同行python,速度很慢,求大神指点一下
附件是我写的一个代码,第一个文件只有一列,第二个文件有很多列,我想打印出所有文件2的第一列在文件一种找不到的行,我写的这个可以运行,但是由于文件非常非常的大,太慢太慢了

求大神指点。
搜索更多相关主题的帖子: python 一列 不同 文件 速度 
2019-09-17 02:57
fall_bernana
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:17
帖 子:240
专家分:2086
注 册:2019-8-16
得分:0 
回复 楼主 liyibo0719
我能给的建议是:
1.第一个文件的内容存成set.这个查询的要比list快
2.第二个文件的里的文件输出不要在循环的时候用open.这相当于反复的打开文件句柄,你可以放到外面.里面只使用write.也可以比如处理完1000个输出一次
3.可以把第二个文件拆分成多个文件,同时处理
4.使用多线程来处理.这个主要是IO的瓶颈.
希望对你有帮助

[此贴子已经被作者于2019-9-17 10:39编辑过]

2019-09-17 09:50
liyibo0719
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2019-8-6
得分:0 
回复 2楼 fall_bernana
谢谢你的建议!
那在 if b[0] not in a:  后面 要怎么存储符合要求的数据呢?
2019-09-17 11:05
fall_bernana
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:17
帖 子:240
专家分:2086
注 册:2019-8-16
得分:0 
回复 3楼 liyibo0719
连接成一个字符串输出就可以.
2019-09-17 11:19
liyibo0719
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2019-8-6
得分:0 
回复 3楼 liyibo0719
能说的详细一点吗?我刚刚入门,不是很懂。
2019-09-17 11:26
fall_bernana
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:17
帖 子:240
专家分:2086
注 册:2019-8-16
得分:0 
回复 5楼 liyibo0719
把你的代码发成文字的.别发图片.
2019-09-17 11:42
liyibo0719
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2019-8-6
得分:0 
回复 6楼 fall_bernana
a=[]
with open("inter_0.16.txt", 'r') as f:
    while True:
        lines = f.readline()
        #print (lines)
        if not lines:
            break
        a=set(lines.rstrip())
        #print(a)

with open ("tmp0.txt", 'r') as f1:
    while True:
        lines = f1.readline()
        if not lines:
            break
        b=lines.rstrip()
        b=b.split()
        if b[0] not in a:
            with open("uniq_read.txt",'a+') as f2:
                f2.write('{}\t{}\t{}\t{}\t{}\n'.format(b[0],b[1],b[2],b[3],b[9]))
2019-09-17 22:56
fall_bernana
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:17
帖 子:240
专家分:2086
注 册:2019-8-16
得分:20 
回复 7楼 liyibo0719
程序代码:
a=set()
with open("inter_0.16.txt", 'r') as f:
    while True:
        lines = f.readline()
        #print (lines)
        if not lines:
            break
        a.add(lines.strip())
        #print(a)
with open("uniq_read.txt",'a+') as f2:
    outstring=""
    outcount=0
    with open ("tmp0.txt", 'r') as f1:
        while True:
            lines = f1.readline()
            if not lines:
                break
            b=lines.rstrip()
            b=b.split()
            if b[0] not in a:
                outstring+='{}\t{}\t{}\t{}\t{}\n'.format(b[0],b[1],b[2],b[3],b[9])
                outcount++
                if outcount>1000:
                    f2.write(outstring)
                    outstring=""
                    outcount=0


[此贴子已经被作者于2019-9-19 09:30编辑过]

2019-09-18 17:56
liyibo0719
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2019-8-6
得分:0 
回复 8楼 fall_bernana
非常感谢!!!
2019-09-23 23:00



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-496849-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.097910 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved