Python: 如何检查一个文本文件,将其与另一个文本文件中的每一行进行比较,并打印不匹配的行

10 浏览
0 Comments

Python: 如何检查一个文本文件,将其与另一个文本文件中的每一行进行比较,并打印不匹配的行

我在这里卡住了。假设我有一个文本文件(example.txt),内容如下:\n

Generic line 1() 46536.buildsomething  
Generic line 2() 98452.constructsomething  
Something I'm interested in seeing  
Another common line() blablabla abc945  
Yet another common line() runningoutofideashere.923954  
Another line I'm interested in seeing  
Line I don't care about 1() yaddayaddayadda  
Line I don't care about 2() yaddayaddayadda  
Generic line 3() 23485.buildsomething  
Yet some other common line  

\n我现在有一个排除文本文件(exclusions.txt),其中包含不打印的行的部分内容:\n

Generic  
common  
don't care about

\n我的想法是打开example.txt文件,打开exclusions.txt文件,然后打印example.txt中不包含exclusions.txt中任何行的行。\n到目前为止我尝试过(完全没有成功):\n

textfile = open("example.txt", "r")
textfile = textfile.readlines()
exclusionslist = []
exclusions = open("exclusions.txt", "r")
exclusions = exclusions.readlines()
for line in exclusions:
    exclusionslist.append(line.rstrip('\n'))
for excline in exclusions:
    for line in textfile:
        if exline not in line:
            print line

\n我认为我知道问题出在哪里,但我不知道如何解决它。我认为我只需要告诉Python,如果textfile中的一行包含exclusions中的任何行,则不要打印它。

0
0 Comments

问题的出现原因:用户想要检查一个文本文件,并将其与另一个文本文件中的每一行进行比较,然后打印不匹配的行。

解决方法:可以使用以下代码来实现:

textfile = open("example.txt", "r")
textfilelines = textfile.readlines()
exclusions = open("exclusions.txt", "r")
exclusionlines = exclusions.readlines()
for x in range(len(exclusionlines)):
    exclusionlines[x] = exclusionlines[x].strip("\n")
for line in textfilelines:
    found = False
    for exclude in exclusionlines:
        if exclude in line:
            found = True
    if not found:
        print line

这段代码首先打开了两个文本文件,分别是example.txt和exclusions.txt。然后,它将这两个文件的内容分别读取到textfilelines和exclusionlines中。

接下来,通过循环遍历exclusionlines列表,并使用strip函数去除每一行中的换行符。然后,在textfilelines中的每一行中进行循环遍历。

在每次循环中,设置一个布尔变量found为False。然后,在exclusionlines中的每一行中进行循环遍历。

如果exclusionlines中的某一行存在于textfilelines的某一行中,就将found变量设置为True。

最后,如果found变量为False,即在exclusionlines中没有找到匹配的行,则打印出这一行。

根据输出的需求,你可能需要从textfilelines中删除换行符。

0
0 Comments

问题的出现的原因是用户想要检查一个文本文件,并将其与另一个文本文件中的每一行进行比较,然后打印出不匹配的行。解决方法是使用Python中的文件操作和循环来实现。

以下是解决方案的代码:

with open("example.txt", "r") as text, open("exclusions.txt", "r") as exc:
    exclusions = [line.rstrip('\n') for line in exc]
    for line in text:
        if not any(exclusion in line for exclusion in exclusions):
            print line

在这段代码中,首先使用`with open()`语句来打开两个文本文件,`example.txt`和`exclusions.txt`。然后,将`exclusions.txt`中的每一行读取并存储到一个列表中。接下来,使用循环遍历`example.txt`中的每一行,检查是否有任何一个`exclusions`中的元素出现在当前行中。如果没有找到匹配的元素,则打印出当前行。

有一个用户提到使用`with open()`时遇到了问题,原因是他使用的是Python 2.5版本。解决方法是升级到Python 2.7或3.3版本,如果不能升级,可以在脚本的开始添加`from __future__ import with_statement`来解决。还有一个用户问到使用`with`是否有什么问题,另一个用户回答说使用`with`更清晰和简单。

还有一个用户提到在`with`块之后尝试重新使用文件时出现了问题,但是在使用`gc.collect()`方法后问题得到了解决。另一个用户回答说根据文档,文件应该在离开`with`块时关闭。至于为什么在离开`with`块后仍然可以访问文件,可能是类似于Eric Lippert在一个著名的类比中描述的问题。同时,建议用户将测试代码分享到网站上以获得更好的解答。

以上是关于如何检查一个文本文件,将其与另一个文本文件中的每一行进行比较,并打印出不匹配行的问题的原因和解决方法的整理。

0