首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较两个.txt文件中的行,打印不包含单词的新行

比较两个.txt文件中的行,打印不包含单词的新行
EN

Stack Overflow用户
提问于 2015-08-12 10:06:55
回答 3查看 91关注 0票数 0

我有下面的代码,对于textfile1中的每一行,搜索textfile2,如果该行包含在textfile2中,则打印出对应的textfile2行。但是,我想为textfile2中没有包含的每一行打印新行。以下是代码:

代码语言:javascript
复制
def readline():
with open("textfile1.txt") as file, open("textfile2.txt") as file2:
    string = set(map(str.rstrip,file))
    for line in file2:
        spl = line.split(None, 1)[0]
        if spl in string:
            print(line.rstrip())    
        else:              ##if spl not in string print new line
            print("\n")

它不像我所期望的那样工作(不打印任何新的行),问题是什么或任何替代的解决方案?

样本Textfile1:

代码语言:javascript
复制
'
a
aa
ab
abandon
abandonaudiofocus
abandonsession
abort
abortablehttprequest
abortanimation
abortcaptures
abortconnection
abortpolicy
abortrequest
abs

样本Textfile2:

代码语言:javascript
复制
'                |            22624
a                |               91
aa               |                7
ab               |                6
abort            |                8
abortanimation   |                5
abs              |              131
abslistview      |              115
absolutelayout   |               50
absolutesizespan |                6
abstracthttpentity |                2
abstractlist     |                1
abstractmap      |                4
abstractselector |                1
abstractset      |                2

Textfile1包含更多的单词,它包含了textfile2中的所有单词。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-12 10:48:28

根据你的问题-

对于textfile1中的每一行,搜索textfile2,如果该行包含在textfile2中,则打印出对应的textfile2行

以及评论-

Textfile1包含了更多的单词,它包含了textfile2中的所有单词

你现在的逻辑--如果实际上是相反的话,它会检查file2 - textfile2.txt中的每一行--这一行的第一部分是否存在于file - textfile1.txt中--根据您的评论,这始终是正确的。

您需要在集合中获取file2的所有元素(每一行的第一部分),然后检查file的每一行。例子-

代码语言:javascript
复制
def get_first(line):
    return line.split(None, 1)[0]

def readline():
    with open("textfile1.txt",'r') as file, open("textfile2.txt",'r') as file2:
        string = set(map(get_first,file2))
        file2.seek(0)
        file2_dict = {}
        for line in file2:
            file2_dict[line.split(None, 1)[0]] = line
        for line in file:
            if line.strip() in string:
                print(file2_dict[line.rstrip()])    
            else:              ##if spl not in string print new line
                print()

另外,在其他部分中,您不需要在您的"\n"中使用print(),而打印本身也会放置一个换行符,您可以做- print()来打印换行符。

示例/演示-

代码语言:javascript
复制
>>> def get_first(line):
...     return line.split(None, 1)[0]
...
>>> def readline():
...     with open("a.txt",'r') as file, open("b.txt",'r') as file2:
...         string = set(map(get_first,file2))
...         for line in file:
...             if line.strip() in string:
...                 print(line.rstrip())
...             else:              ##if spl not in string print new line
...                 print()
...
>>> readline()
a
aa
ab



abort

abortanimation




abs

在上面的示例中,a.txt包含来自示例textfile1.txt的数据,b.txt包含来自textfile2.txt示例的数据。

票数 0
EN

Stack Overflow用户

发布于 2015-08-12 12:15:39

对于textfile2中的每一行,在textfile1中搜索其第一部分,如果该行包含在textfile2中,则打印出对应的textfile2行。

代码语言:javascript
复制
def readline():
        file1_list = [line.rstrip() for line in open("textfile1.txt")]
        file2_list = [line.rstrip() for line in open("textfile2.txt")]
        fileo_list = [line if line.split(None, 1)[0] in file1_list else '' for line in file2_list]
        for line in fileo_list:
            print(line)

这将打印出来:

代码语言:javascript
复制
'                |            22624
a                |               91
aa               |                7
ab               |                6
abort            |                8
abortanimation   |                5
abs              |              131


.....
票数 1
EN

Stack Overflow用户

发布于 2015-08-13 23:40:50

集合让这件事变得很简单

代码语言:javascript
复制
with open("textfile1.txt") as file1:
    textfile_1_set = set(map(str.rstrip, file1))

with open("textfile2.txt") as file2:
    textfile_2_set = set([l.split()[0] for l in file2])

# remove all the lines that are in textfile2 from the 
# set of lines from textfile1
in_1_but_not_2 = textfile_1_set - textfile_2_set

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

https://stackoverflow.com/questions/31962097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档