如何在 python 中跳过新行进行比较?
How to skip new lines for comparison in python?
我有一个 python 代码可以比较 2 个文本文件并显示它们是否有差异。首先,我对文件进行排序,然后删除排序后文本末尾的空格,然后进行比较。
#!/usr/bin/env python
import difflib
from pathlib import Path
path1=Path('/data1/Dir/thesaurus/file1')
path2=Path('/data1/Dir/thesaurus/file2')
text1 = open(str(path1)).readlines()
text1.sort(key=lambda x: x.strip('#').rsplit('.', 1)[0])
text2 = open(str(path2)).readlines()
text2.sort(key=lambda x: x.strip('#').rsplit('.', 1)[0])
for line in difflib.unified_diff(text1, text2, n=0):
print line,
其实比较的文件是不同服务器的/etc/passwd
。这段代码运行良好,但最近我发现它没有为某些服务器返回正确的输出,因为 \n
。我怎样才能在比较中消除这些 \n
?
例如file1和file2有这样的内容:
@=> cat file1
wise:x:wuser:/home/wise:/sbin/nologin
nafs:x:user:/home/nafs:/sbin/nologin
khor:x:khor:/home/khor:/bin/bash
jari:x:user:/home/jari:/sbin/nologin
test:x:Test:/home/test:/sbin/nologin
zabbix:x:Zabbix Agent:/home/zabbix:/usr/sbin/nologin
@=> cat file2
wise:x:wuser:/home/wise:/sbin/nologin
nafs:x:user:/home/nafs:/sbin/nologin
jari:x:user:/home/jari:/sbin/nologin
zabbix:x:Zabbix Agent:/home/zabbix:/usr/sbin/nologin
我的期望:
---
+++
@@ -6 +5,0 @@
-khor:x:khor:/home/khor:/bin/bash
@@ -8 +7 @@
-test:x:Test:/home/test:/sbin/nologin
我得到了什么:
---
+++
@@ -1 +1 @@
-nafs:x:user:/home/nafs:/sbin/nologin
+nafs:x:user:/home/nafs:/sbin/nologin
@@ -6 +5,0 @@
-khor:x:khor:/home/khor:/bin/bash
@@ -8 +7 @@
-jari:x:user:/home/jari:/sbin/nologin
+jari:x:user:/home/jari:/sbin/nologin
@@ -12 +10,0 @@
-test:x:Test:/home/test:/sbin/nologin
i 运行 我的代码没有比较部分并打印了 text1
和 text2
来查找问题,我看到行旁边有一个 \n
它们在一个文件中而不是在其他文件中被错误返回。
Strip每行?
text1 = [l.strip() for l in open(str(path1))]
我有一个 python 代码可以比较 2 个文本文件并显示它们是否有差异。首先,我对文件进行排序,然后删除排序后文本末尾的空格,然后进行比较。
#!/usr/bin/env python
import difflib
from pathlib import Path
path1=Path('/data1/Dir/thesaurus/file1')
path2=Path('/data1/Dir/thesaurus/file2')
text1 = open(str(path1)).readlines()
text1.sort(key=lambda x: x.strip('#').rsplit('.', 1)[0])
text2 = open(str(path2)).readlines()
text2.sort(key=lambda x: x.strip('#').rsplit('.', 1)[0])
for line in difflib.unified_diff(text1, text2, n=0):
print line,
其实比较的文件是不同服务器的/etc/passwd
。这段代码运行良好,但最近我发现它没有为某些服务器返回正确的输出,因为 \n
。我怎样才能在比较中消除这些 \n
?
例如file1和file2有这样的内容:
@=> cat file1
wise:x:wuser:/home/wise:/sbin/nologin
nafs:x:user:/home/nafs:/sbin/nologin
khor:x:khor:/home/khor:/bin/bash
jari:x:user:/home/jari:/sbin/nologin
test:x:Test:/home/test:/sbin/nologin
zabbix:x:Zabbix Agent:/home/zabbix:/usr/sbin/nologin
@=> cat file2
wise:x:wuser:/home/wise:/sbin/nologin
nafs:x:user:/home/nafs:/sbin/nologin
jari:x:user:/home/jari:/sbin/nologin
zabbix:x:Zabbix Agent:/home/zabbix:/usr/sbin/nologin
我的期望:
---
+++
@@ -6 +5,0 @@
-khor:x:khor:/home/khor:/bin/bash
@@ -8 +7 @@
-test:x:Test:/home/test:/sbin/nologin
我得到了什么:
---
+++
@@ -1 +1 @@
-nafs:x:user:/home/nafs:/sbin/nologin
+nafs:x:user:/home/nafs:/sbin/nologin
@@ -6 +5,0 @@
-khor:x:khor:/home/khor:/bin/bash
@@ -8 +7 @@
-jari:x:user:/home/jari:/sbin/nologin
+jari:x:user:/home/jari:/sbin/nologin
@@ -12 +10,0 @@
-test:x:Test:/home/test:/sbin/nologin
i 运行 我的代码没有比较部分并打印了 text1
和 text2
来查找问题,我看到行旁边有一个 \n
它们在一个文件中而不是在其他文件中被错误返回。
Strip每行?
text1 = [l.strip() for l in open(str(path1))]