我有两个简单的文本文件,我试图逐行比较它们,看看文件1中的哪些行没有出现在文件2中。我尝试了几个不同的选项,我读过类似的东西在这个网站上的问题,但我仍然无法让它工作。欢迎大家提出意见。这是我的代码:
listNames = raw_input("Which is list1?")
list2Names = raw_input("Which is list2?")
data1 = open(listNames)
data2 = open(list2Names)
data = []
source1 = data1.readlines()
source2 = data2.readlines()
for line in source1:
temp1 = line.rstrip()
inList = False
for ln2 in source2:
temp2 = ln2.rstrip()
if temp1 == temp2:
inList == True #edit2: oops
if inList == False:
data.append(temp1)
for x in data:
print x
从测试我的代码看起来,根本没有访问过第二个If语句。
编辑:更正了一行
答案 0 :(得分:1)
您的第二个if语句未被访问,因为您有错字:
inList == True
应该是
inList = True
修改强>
你也可以考虑这个而不是你的解决方案:
with open('file1.txt', 'r') as file1:
with open('file2.txt', 'r') as file2:
diff = set(line.rstrip() for line in file1).difference(line.rstrip() for line in file2)
diff变量将包含一个集合,其中所有行都在file1中但不在file2中
答案 1 :(得分:1)
如果您使用Python set()
类型来保存每个列表中的数据元素,那么您可以使用{获取设置差异(即,在第一个列表中出现的那些元素,而不是第二个列表中出现的那些元素) {1}}运营商:
-
这里的前两行通过将文件句柄(调用data1 = set(l.rstrip() for l in open(raw_input("Which is list1?")))
data2 = set(l.rstrip() for l in open(raw_input("Which is list2?")))
for x in data1 - data2:
print x
的返回值)作为迭代器处理,并将每个文件中的信息直接添加到集合中,从第一个和第二个文件加载数据对象
如果您需要手动计算设置差异,使用for循环,那么您可以使用Python的open(...)
函数来测试成员资格:
any
最终由垃圾收集器清理data1 = list(l.rstrip() for l in open(raw_input("Which is list1?")))
data2 = list(l.rstrip() for l in open(raw_input("Which is list2?")))
data = []
for x in data1:
if not any(x == y for y in data2):
data.append(x)
for x in data:
print x
返回的文件句柄,但对于“真实”代码,在处理文件时使用open(...)
语句更好。例如,要从上面的代码构建源列表,请使用:
with
缩进块完成后,data1 = []
with open(raw_input("Which is list1?")) as handle:
data1.extend(l.rstrip() for l in handle)
# ...
语句将为您关闭文件句柄。