两个 TXT 文件之间的差异词
Delta words between two TXT files
我想计算两个文件之间的增量字。
file_1.txt
有内容 One file with some text and words.
。
file_1.txt
有内容 One file with some text and additional words to be found.
.
Unix 系统上的 diff
命令提供以下信息。 difflib
可以给出类似的输出。
$ diff file_1.txt file_2.txt
1c1
< One file with some text and words.
---
> One file with some text and additional words to be found.
有没有一种简单的方法可以找到在两个文件之间添加或删除的单词,或者至少像 git diff --word-diff
那样在两行之间添加或删除单词。
首先,您需要使用 open()
将文件读入字符串,其中 'file_1.txt'
是文件路径,'r'
是 "reading mode"。
第二个文件类似。完成后不要忘记 close()
您的文件!
使用 split(' ')
函数将您刚刚阅读的字符串拆分为单词列表。
file_1 = open('file_1.txt', 'r')
text_1 = file_1.read().split(' ')
file_1.close()
file_2 = open('file_2.txt', 'r')
text_2 = file_2.read().split(' ')
file_2.close()
下一步您需要了解 text_1
和 text_2
列表变量(对象)之间的区别。
有很多方法可以做到。
1)
您可以使用 collections
库中的 Counter
class。
将你的列表传递给 class 的构造函数,然后通过正序和倒序相减找到差异,调用 elements()
方法获取元素并调用 list()
将其转换为列表类型。
from collections import Counter
text_count_1 = Counter(text_1)
text_count_2 = Counter(text_2)
difference = list((text_count_1 - text_count_2).elements()) + list((text_count_2 - text_count_1).elements())
这里是计算delta字的方法。
from collections import Counter
text_count_1 = Counter(text_1)
text_count_2 = Counter(text_2)
delta = len(list((text_count_2 - text_count_1).elements())) \
- len(list((text_count_1 - text_count_2).elements()))
print(delta)
2)
使用 difflib
库中的 Differ
class。将两个列表传递给 Differ
class 的 compare()
方法,然后用 for
.
对其进行迭代
from difflib import Differ
difference = []
for d in Differ().compare(text_1, text_2):
difference.append(d)
然后就可以这样算delta字了
from difflib import Differ
delta = 0
for d in Differ().compare(text_1, text_2):
status = d[0]
if status == "+":
delta += 1
elif status == "-":
delta -= 1
print(delta)
3)
你可以自己写差异方法。例如:
def get_diff (list_1, list_2):
d = []
for item in list_1:
if item not in list_2:
d.append(item)
return d
difference = get_diff(text_1, text_2) + get_diff(text_2, text_1)
我认为还有其他方法可以做到这一点。但我会限制三个。
由于您获得了 difference
列表,您可以随心所欲地管理输出。
..这是使用 dict()
的另一种方法
#!/usr/bin/python
import sys
def loadfile(filename):
h=dict()
f=open(filename)
for line in f.readlines():
words=line.split(' ')
for word in words:
h[word.strip()]=1
return h
first=loadfile(sys.argv[1])
second=loadfile(sys.argv[2])
print "in both first and second"
for k in first.keys():
if k and k in second.keys():
print k
我想计算两个文件之间的增量字。
file_1.txt
有内容One file with some text and words.
。file_1.txt
有内容One file with some text and additional words to be found.
.
diff
命令提供以下信息。 difflib
可以给出类似的输出。
$ diff file_1.txt file_2.txt
1c1
< One file with some text and words.
---
> One file with some text and additional words to be found.
有没有一种简单的方法可以找到在两个文件之间添加或删除的单词,或者至少像 git diff --word-diff
那样在两行之间添加或删除单词。
首先,您需要使用 open()
将文件读入字符串,其中 'file_1.txt'
是文件路径,'r'
是 "reading mode"。
第二个文件类似。完成后不要忘记 close()
您的文件!
使用 split(' ')
函数将您刚刚阅读的字符串拆分为单词列表。
file_1 = open('file_1.txt', 'r')
text_1 = file_1.read().split(' ')
file_1.close()
file_2 = open('file_2.txt', 'r')
text_2 = file_2.read().split(' ')
file_2.close()
下一步您需要了解 text_1
和 text_2
列表变量(对象)之间的区别。
有很多方法可以做到。
1)
您可以使用 collections
库中的 Counter
class。
将你的列表传递给 class 的构造函数,然后通过正序和倒序相减找到差异,调用 elements()
方法获取元素并调用 list()
将其转换为列表类型。
from collections import Counter
text_count_1 = Counter(text_1)
text_count_2 = Counter(text_2)
difference = list((text_count_1 - text_count_2).elements()) + list((text_count_2 - text_count_1).elements())
这里是计算delta字的方法。
from collections import Counter
text_count_1 = Counter(text_1)
text_count_2 = Counter(text_2)
delta = len(list((text_count_2 - text_count_1).elements())) \
- len(list((text_count_1 - text_count_2).elements()))
print(delta)
2)
使用 difflib
库中的 Differ
class。将两个列表传递给 Differ
class 的 compare()
方法,然后用 for
.
from difflib import Differ
difference = []
for d in Differ().compare(text_1, text_2):
difference.append(d)
然后就可以这样算delta字了
from difflib import Differ
delta = 0
for d in Differ().compare(text_1, text_2):
status = d[0]
if status == "+":
delta += 1
elif status == "-":
delta -= 1
print(delta)
3)
你可以自己写差异方法。例如:
def get_diff (list_1, list_2):
d = []
for item in list_1:
if item not in list_2:
d.append(item)
return d
difference = get_diff(text_1, text_2) + get_diff(text_2, text_1)
我认为还有其他方法可以做到这一点。但我会限制三个。
由于您获得了 difference
列表,您可以随心所欲地管理输出。
..这是使用 dict()
的另一种方法#!/usr/bin/python
import sys
def loadfile(filename):
h=dict()
f=open(filename)
for line in f.readlines():
words=line.split(' ')
for word in words:
h[word.strip()]=1
return h
first=loadfile(sys.argv[1])
second=loadfile(sys.argv[2])
print "in both first and second"
for k in first.keys():
if k and k in second.keys():
print k