首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >查找两个文件之间的子字符串匹配

查找两个文件之间的子字符串匹配
EN

Stack Overflow用户
提问于 2019-07-18 17:29:53
回答 2查看 69关注 0票数 1

我有一张电影片名和一张名字的清单。

电影:

  • 独立日
  • 是谁陷害了兔子罗杰
  • 罗斯玛丽的宝宝
  • 捉鬼者
  • 玛丽身上有些东西

姓名:

  • 罗杰
  • 凯尔
  • 玛丽
  • 相同的

我想要做一个新的列表,所有的电影,匹配的名字,从名称列表。

  • 谁陷害了罗杰兔子(匹配的“罗杰”)
  • 罗斯玛丽的宝宝(匹配的“玛丽”)
  • 有些关于玛丽的东西(匹配的“玛丽”)

我尝试过用Python来完成这个任务,但由于某种原因,它无法工作。结果文件为空。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
with open("movies.csv", "r") as movieList:
    movies = movieList.readlines()

with open("names.txt", "r") as namesToCheck:
    names = namesToCheck.readlines()

with open("matches.csv", "w") as matches:
    matches.truncate(0)

    for i in range(len(movies)):
        for j in range(len(names)):
            if names[j].lower() in movies[i].lower():
                matches.write(movies[i])
                break

    matches.close();

我在这里错过了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-18 18:08:42

您没有得到任何结果的原因很可能是,当您在Python中的文件上调用readlines()时,它会给出每一行的列表,并在末尾附加一个换行符\n。因此,您的程序将检查"roger\n"是否位于电影文件中的一行中,而不仅仅是"roger"

要解决这个问题,只需将一个[:-1]添加到if语句中,只检查名称,而不检查换行符:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if names[j].lower()[:-1] in movies[i].lower():

还可以通过使用read().splitlines()删除换行符,改变读取名称文件的方式,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
names = namesToCheck.read().splitlines()
票数 1
EN

Stack Overflow用户

发布于 2019-07-18 18:11:27

这很管用..。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Movies="""Independence Day
Who Framed Roger Rabbit
Rosemary's Baby
Ghostbusters
There's Something About Mary
"""

Names="""Roger
Kyle
Mary
Sam"""

with StringIO(Movies) as movie_file:
    movies=[n.strip().lower() for n in movie_file.readlines()]
with StringIO(Names) as name_file:
    names=[n.strip().lower() for n in name_file.readlines()]

for name in names:
    for film in movies:
        if film.find(name) is not -1:
            print("{:20s} {:40s}".format(name,film))

输出:

陷害罗杰兔子的罗杰

玛丽迷迭香的孩子

玛丽,关于玛丽的一些事情

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57104459

复制
相关文章
Java在字符串中查找匹配的子字符串
示例: 在源字符串“You may be out of my sight, but never out of my mind.”中查找“my”的个数。输出:匹配个数为2
全栈程序员站长
2022/09/14
7.3K0
字符串匹配:字符串中查找某子串
我们在平时的软件开发,尤其是嵌入式开发,字符串匹配是非常重要的一个算法。而目前常用的字符串匹配算法有很多,下面就来介绍几个。
跋扈洋
2022/03/29
1.5K0
字符串中查找子串_cstring查找子字符串
假设要从主串 s = “goodgoogle” 中找到 t = “google” 子串。根据我们的思考逻辑,则有:
全栈程序员站长
2022/09/24
3K0
字符串中查找子串_cstring查找子字符串
子字符串查找----暴力查找法
设文本长度为N,要匹配的模式的长度为M,暴力查找算法在最坏的情况下运行时间与MN成正比,但在处理许多应用程序中的字符串时,它的实际运行时间一般与M+N成正比。 实现方法1: 使用一个值指针i跟踪文本,一个指针j跟踪要匹配的模式,对每一个i,代码首先将j重置为0并不断增大,直到找到了一个不匹配的字符或者是匹配成功(j==M)。 public static int search(String pat, String txt) { int M = pat.length(); int N = txt.lengt
SuperHeroes
2018/05/30
1.4K0
linux下根据字符串匹配文件内容来查找文件
前言: 在这家公司比较少接触到linux, 内网测试都是部署在windows上. 近期部署了外网linux上, 测试在线上遇到的一些bug需要解决, 一时间忘记了一些命令, 于是打算补一补, 用到了就记一记
cg错过
2020/11/19
3.6K0
linux下根据字符串匹配文件内容来查找文件
子字符串查找----Boyer-Moore算法(从右向左匹配)
Boyer-Moore算法是一种从右向左扫描模式字符串并将它与文本匹配的算法。 举例说明Boyer-Moore算法: 有文本FINDINAHAYSTACKNEEDLE和模式字符串NEEDLE. 因为是从右向左扫描,所以会先比较模式中最后一位E和文本中下标为5的N。不匹配,因为模式字符串中也出现了N,则右移模式字符串使得模式中最右边的N(这里是位置0的N)与文本中的相应N对齐。然后接着比较模式字符串最后的E和文本中的S(下标10),不匹配,而且模式中不含有字符S,可以将模式直接右移6位,然后继续匹配.....
SuperHeroes
2018/05/30
1.2K0
【python】---- 查找两个数之间的【可逆素数】
例如: 1009是一个素数,把它倒过来9001也是一个素数,所以我们就说1009是一个可逆素数(同理9001也是一个可逆素数)。
Rattenking
2022/01/06
2.2K0
【python】---- 查找两个数之间的【可逆素数】
KMP子字符串查找算法
KMP子字符串查找算法 概述 算法的基本思想是:当出现不匹配时,就能知晓一部分文本的内容,可以利用这些信息避免将指针回退到所有这些已知的字符串之前。 DFA(确定有限状态机)模拟 提前判断如何重新查找,而这种判断只取决于模式本身,所以可以对模式的字符序列做一个确定有限状态机。 DFA的数据结构表示为二维数组dfa[R][M],其中R为指定字典中的字符集的个数(比如ASCII为256),M为匹配字符串pat的长度,状态的意思是文本中某个位置i匹配pat的程度,0状态为未匹配状态,M状态为终止状态,找到了完整匹
felix
2018/06/08
1.4K0
子字符串查找之KMP
当我们需要从文档中查找某个关键词时,就用到了子字符串查找技术。比如在某个数据库导出文档中想要查找所有用户的密码,想在一个学长给的word题库中查找你正在做的检测题的答案。就像上边这个表格,我们想要在字符串文本中查找模式所在位置,并返回这个位置给用户。这个功能是怎么实现的呢? 我们可以简单暴力的来实现,从头开始一个字符一个字符的比较字符串文本和模式,如果匹配失败,再从字符串文本的下一个位置开始跟模式从头比较,重复这个过程,如果成功,则返回模式在字符串中的起始位置。
naget
2019/07/03
9240
子字符串查找之KMP
子字符串查找----KMP算法
Kunth-Morris-Pratt算法的基本思想是:当出现不匹配时,就能知晓一部分内容(因为匹配失败之前的字符已经和模式相匹配)。可以利用这些信息避免指针回退。令人惊讶的是,KMP算法在匹配失败时,总能将j设置为一个值以使i不回退。 在KMP算法中,不会回退文本指针i,而是用一个数组dfa[][]来记录匹配失败时指针j应该回退多远。对于每一个字符c,在比较了c和pat.charAt(j)后,dfa[c][j]表示的是应该和下一个文本字符比较的模式字符的位置。在匹配时会继续比较下一个字符,因此dfa[pat
SuperHeroes
2018/05/30
1.1K0
算法字符串匹配(查找)-BF算法
字符串是数据结构中比较简单的一种,但又是我们最常用的数据结构之一。对于字符串对象,最重要的操作之一便是字符串匹配(查找),本篇文章便向大家介绍一个典型的匹配算法—BF算法
算法与编程之美
2019/07/17
1.7K0
算法字符串匹配(查找)-BF算法
使用kmp算法匹配字符串来查找文件(java版)
这篇文章我都忘记啥时候写的了, 现在是放在我的博客上面, 时间记录的是17年. 同样, 搬过这里来, 文章内容我还是照样不更改, 保持原样, 代码可能会有点差...:)
cg错过
2020/11/30
1.4K0
[数据结构拾遗]子字符串匹配常用算法总结
本专栏旨在快速了解常见的数据结构和算法。在需要使用到相应算法时,能够帮助你回忆出常用的实现方案并且知晓其优缺点和适用环境。
Rude3Knife的公众号
2019/08/08
9240
[数据结构拾遗]子字符串匹配常用算法总结
[数据结构拾遗]子字符串匹配常用算法总结
本专栏旨在快速了解常见的数据结构和算法。在需要使用到相应算法时,能够帮助你回忆出常用的实现方案并且知晓其优缺点和适用环境。
蛮三刀酱
2019/03/26
1.2K0
[数据结构拾遗]子字符串匹配常用算法总结
关于字符串匹配查找的总结(43天)
判断一个字符型字段中出现某个字符超过3次的数据行,如果为了简单达到目的,可以直接使用Like来做, SQL> select content from clob_test where content like '%is%is%is%'; CONTENT -------------------------------------------------------------------------------- this is a test,and it is very useful 但是可能在实际应用中,
jeanron100
2018/03/13
8690
子字符串查找----各种算法总结
优点: 暴力查找算法:实现简单且在一般情况下工作良好(Java的String类型的indexOf()方法就是采用暴力子字符串查找算法); Knuth-Morris-Pratt算法能够保证线性级别的性能且不需要在正文中回退; Boyer-Moore算法的性能一般情况下都是亚线性级别; Rabin-Karp算法是线性级别; 缺点: 暴力查找算法所需时间可能和NM成正比; Knuth-Morris-Pratt算法和Boyer-Moore算法需要额外的内存空间; Rabin-Karp算法内循环很长(若干次算术运算,
SuperHeroes
2018/05/30
1K0
mongodb 字符串查找匹配中$regex的用法
官网地址:https://docs.mongodb.com/manual/reference/operator/query/regex/#regex-case-insensitive
庞小明
2018/12/10
6.2K0
如何在 Python 中查找两个字符串之间的差异位置?
在文本处理和字符串比较的任务中,有时我们需要查找两个字符串之间的差异位置,即找到它们在哪些位置上不同或不匹配。这种差异位置的查找在文本比较、版本控制、数据分析等场景中非常有用。本文将详细介绍如何在 Python 中实现这一功能,以便帮助你处理字符串差异分析的需求。
网络技术联盟站
2023/06/01
3.4K0
使用kmp算法匹配字符串来查找文件(java版本)-2
python实现的字符串搜索文件和java实现的字符串搜索文件,其运行速率对比还是很明显,估计问题就在python对文件编码格式上面,如图
cg错过
2020/12/01
6190
使用kmp算法匹配字符串来查找文件(java版本)-2
python匹配两个文件中相同的内容
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
全栈程序员站长
2022/11/07
2.3K0

相似问题

查找两个文件之间的匹配

11

查找和匹配两个文件之间的字符串

13

查找两个"/“之间的子字符串

41

查找两个文件的两列之间的匹配

11

查找两个数组之间的不匹配字符串

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文