Python: 如何检查一个文本文件,将其与另一个文本文件中的每一行进行比较,并打印不匹配的行
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中的任何行,则不要打印它。
问题的出现原因:用户想要检查一个文本文件,并将其与另一个文本文件中的每一行进行比较,然后打印不匹配的行。
解决方法:可以使用以下代码来实现:
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中删除换行符。
问题的出现的原因是用户想要检查一个文本文件,并将其与另一个文本文件中的每一行进行比较,然后打印出不匹配的行。解决方法是使用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在一个著名的类比中描述的问题。同时,建议用户将测试代码分享到网站上以获得更好的解答。
以上是关于如何检查一个文本文件,将其与另一个文本文件中的每一行进行比较,并打印出不匹配行的问题的原因和解决方法的整理。