我在某个位置有一个文件,它是由python代码生成的。我想运行相同的代码,以生成另一个文件,但具有相同的名称和相同的位置,所以它将取代第一个。在运行代码之前,我将初始文件内容保存为字符串。运行代码后,我将最终文件内容保存到另一个字符串中。我如何比较data_initial和data_final字符串作为文件内容,并准确地突出显示这两个字符串中的不同单词?我试过这样做:
data_initial="1234"
data_final="12345 new thing"
first_set = set(data_initial)
second_set = set(data_final)
difference = first_set.symmetric_difference(second_set)
但是这给了我:
difference is
{'t', 'n', ' ', 'i', '5', 'e', 'h', 'w', 'g'}
我想看看不同的单词,比如
12345 new thing
如果可能的话,也可以检查每一个被改变的短语。
您正在使用set还要记住python中的string是一个列表哪怕是一个字符。symmetric_difference返回一个新字符列表。
https://stackoverflow.com/a/30683765/18846844这可能满足您的需要:
我通过使用单个循环改变了解决方案。这个怎么样:
# First, I removed the split... it is already an array
str1 = input("Enter first string:")
str2 = input("Enter second string:")
#then creating a new variable to store the result after
#comparing the strings. You note that I added result2 because
#if string 2 is longer than string 1 then you have extra characters
#in result 2, if string 1 is longer then the result you want to take
#a look at is result 2
result1 = ''
result2 = ''
#handle the case where one string is longer than the other
maxlen=len(str2) if len(str1)<len(str2) else len(str1)
#loop through the characters
for i in range(maxlen):
#use a slice rather than index in case one string longer than other
letter1=str1[i:i+1]
letter2=str2[i:i+1]
#create string with differences
if letter1 != letter2:
result1+=letter1
result2+=letter2
#print out result
print ("Letters different in string 1:",result1)
print ("Letters different in string 2:",result2)
如果您想获得更改的单词,而不是字符,只需通过调用split()
将整个字符串转换为列表,然后转换为单词集-参见下面的代码。同样,如果你想知道段落中哪些句子被改变了,也可以这样做,可能是由n
或.
分割
str1 = "the quick brown fox jumps over the lazy dog"
str2 = "the slow brown bull jumps over the crazy frog"
wset1=set(list(str1))
wset2=set(list(str2))
##words that are in one sentence and not in the other
wset1.symmetric_difference(wset2)
{'slow', 'crazy', 'frog', 'fox', 'quick', 'bull', 'lazy', 'dog'}
##words in str1 and not in str2
wset1.difference(wset2)
{'fox', 'quick', 'lazy', 'dog'}
但是如果你想要一个更全面的解决方案,即你想知道哪些单词替换了哪些单词,你应该看看标准库difflib
模块。