python匹配两个文件中相同的内容

python匹配两个文件中相同的内容data_small.txt中内容如下:34305258139732data_big.txt中内容如下:343 2009-05-30T17:01:58Z 39.04183745 -94.5914053833 9191343 2009-05-28T23:40:31Z 39.0523183095 -94.6074986458 890423 2009-05-28T23:40:31Z 39.0523183095 -94.6074986458 890456 2009-05-27T18:59:50

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

data_small.txt中内容如下:
343 0
5258 1
3973 2
data_big.txt中内容如下:
343 2009-05-30T17:01:58Z 39.04183745 -94.5914053833 9191
343 2009-05-28T23:40:31Z 39.0523183095 -94.6074986458 8904
23 2009-05-28T23:40:31Z 39.0523183095 -94.6074986458 8904
56 2009-05-27T18:59:50Z 39.0424168 -94.59061145 9188
5258 2009-05-15T00:09:42Z 38.9920234667 -94.5920920333 10927
5258 2009-05-27T18:59:50Z 39.0424168 -94.59061145 9188
545 2009-05-15T00:09:42Z 38.9920234667 -94.5920920333 10927
3973 2009-05-14T20:47:20Z 39.0142536 -94.5928215833 12305
3973 2009-05-14T20:43:05Z 39.0146281324 -94.5907831192 9627

需求:将data_big中有data_small第一列所对应的那一行重新写入新的text文件。
即得到new_data.txt如下:
343 2009-05-30T17:01:58Z 39.04183745 -94.5914053833 9191
343 2009-05-28T23:40:31Z 39.0523183095 -94.6074986458 8904
5258 2009-05-15T00:09:42Z 38.9920234667 -94.5920920333 10927
5258 2009-05-27T18:59:50Z 39.0424168 -94.59061145 9188
3973 2009-05-14T20:47:20Z 39.0142536 -94.5928215833 12305
3973 2009-05-14T20:43:05Z 39.0146281324 -94.5907831192 9627

代码:

''' 根据data_small筛选数据集,得到新的小数据集。 '''
fid = open('data_new', 'w')
with open(r'./data_small.txt', mode='r', encoding='utf8') as rf1, open(r'./data_big.txt', mode='r', encoding='utf8') as rf2:
    content1 = rf1.readlines(-1)  # 读取所有行
    content2 = rf2.readlines(-1)
    for i in content1:
        x_1 = i.split()
        for j in content2:
            x_2 = j.split()
            if x_1[0] == x_2[0]:  # 如果相同写入新的文件
                fid.write(j)
        else:
            pass

fid.close()

以上代码时间复杂度太高,可用以下代码:

fid = open('data_new_1', 'w')
with open(r'./data_small.txt', mode='r', encoding='utf8') as rf1, open(r'./data_big.txt', mode='r', encoding='utf8') as rf2:
    content1 = rf1.readlines(-1)  # 读取所有行
    user_id = [line.split()[0] for line in content1]
    content2 = rf2.readlines(-1)
    for j in content2:
        x_2 = j.split()
        if x_2[0] in user_id:  
            fid.write(j)

fid.close()

tips:

r只读,r+读写,文件不存在报错
w只写,w+读写,若文件不存在可创建,新写入内容会覆盖之前内容
a附加写,不可读,a+附加读写,若文件不存在可创建,可追加写,不覆盖

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/183611.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vscode中svn使用详解_iis配置步骤

    vscode中svn使用详解_iis配置步骤XcodeSVN配置方法    Mac自带svn,所以我们就不需要下载了,稍稍修改一下subversion配置就能使用。大大教了两种方法:第一步,配置Subversion  Leopard中自带了SVN,但Xcode的项目文件中,并不是所有文件都适于加入SVN中进行管理,比如编译后的文件和编译过程中产生的文件,这些文件不属于源代码,应该告诉svn忽略掉,方法:  编辑~/.subversi

    2025年11月8日
    2
  • Linux 源码编译Python 3.6[通俗易懂]

    Linux 源码编译Python 3.6

    2022年3月3日
    38
  • 【PyTorch】详解pytorch中nn模块的BatchNorm2d()函数

    【PyTorch】详解pytorch中nn模块的BatchNorm2d()函数基本原理在卷积神经网络的卷积层之后总会添加BatchNorm2d进行数据的归一化处理,这使得数据在进行Relu之前不会因为数据过大而导致网络性能的不稳定,BatchNorm2d()函数数学原理如下:BatchNorm2d()内部的参数如下:1.num_features:一般输…

    2022年6月14日
    57
  • 如何用photoshop做24色环_【PS教你快速绘制超漂亮的色环】 24色环图绘制

    如何用photoshop做24色环_【PS教你快速绘制超漂亮的色环】 24色环图绘制这个圆环中的格子是36*11,顺时针方向是36个,横向是11个,当然包括中间的白色。白色也算一个格子。最终效果:按照上面的长宽比数据,我新建了一个画布,尺寸放大20倍,也就是720*220。新建一层,填充PS自带的彩虹渐变。对照原图的外黑里白的效果,添加一个黑白渐变,混合模式使用”强光”。马赛克,这是很关键的一步。之前我说了我把长宽比放大20倍,所以这里马赛克的大小也设为20像素。这一步也很重要,…

    2025年8月12日
    3
  • J2EE架构师之路[通俗易懂]

    J2EE架构师之路[通俗易懂]不经意的回首,工作进入第五个年头了,发现走过了从Java程序员到J2EE架构师的历程。发现电脑上安装了各种各样的J2EE工具:JBuilder,WSAD,Eclipse,Rose,Together,Weblogic,Jtest,Optimizator,Mysql…发现电脑上保存了各种各样的OpenSource项目:Tomcat,JBoss,Ant,Hibernate,Spr

    2022年6月30日
    27
  • [ 工具篇 ] 谷歌安装 hackbar (超级详细)

    [ 工具篇 ] 谷歌安装 hackbar (超级详细)harkbar

    2022年5月7日
    276

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号