使用Python的简单嵌套循环
我有两个简单的文本文件,我试图逐行比较它们,看看文件1中的哪些行没有出现在文件2中。我尝试了几个不同的选项,从我在这个网站上看到的类似问题,但我仍然无法让它工作。欢迎提出任何建议。这是我的密码:使用Python的简单嵌套循环,python,for-loop,python-3.x,Python,For Loop,Python 3.x,我有两个简单的文本文件,我试图逐行比较它们,看看文件1中的哪些行没有出现在文件2中。我尝试了几个不同的选项,从我在这个网站上看到的类似问题,但我仍然无法让它工作。欢迎提出任何建议。这是我的密码: listNames = raw_input("Which is list1?") list2Names = raw_input("Which is list2?") data1 = open(listNames) data2 = open(list2Names) data = [] source1 =
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语句似乎根本没有被访问
编辑:更正了第二条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中的所有行。如果使用Python
set()
类型保存每个列表中的数据元素,则可以使用-
操作符获得集合差异(即,出现在第一个列表中而不是第二个列表中的元素):
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
这里的前两行从第一个和第二个文件加载数据,方法是将文件句柄(调用open(…)
)的返回值)视为迭代器,并将每个文件中的信息直接添加到set对象
如果需要使用for循环手动计算集合差异,则可以使用Python的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)
# ...
缩进块完成后,
with
语句将为您关闭文件句柄。是的,我在发布此消息后立即注意到了这一点。不幸的是,我的代码仍然不能像预期的那样工作…不管怎样,我是个白痴。我明白你的意思了。只是一个简单的提示,你检查==真和==假是一个非常糟糕的主意。它违反了规则,也可能被Python误解。使用if-inList:代替if-inList==True。也一样。哇,谢谢,这比我想做的简单多了。只是一个简单的问题,我如何关闭文件?或者这是不必要的?检查“with”关键字并设置类型我将用with
语句的示例更新答案。