在Python 3中打开2个文件并将其分配给2个集合

在Python 3中打开2个文件并将其分配给2个集合,python,file,set,Python,File,Set,这是我的示例代码。它起作用了。但我相信有一种更简单的方法可以将值存储在一个集合中。我只知道如何先将它们存储在列表中,然后再将它们转移到集合中。我之所以将它们移动到集合中,是为了利用difference()方法。只是向社区征求一些建议。大家的意见都很好 a_file = open(r'c:\a.csv', 'r') b_file = open(r'c:\b.csv', 'r') a_list = a_file.read().splitlines() b_list = b_file.read().

这是我的示例代码。它起作用了。但我相信有一种更简单的方法可以将值存储在一个集合中。我只知道如何先将它们存储在列表中,然后再将它们转移到集合中。我之所以将它们移动到集合中,是为了利用difference()方法。只是向社区征求一些建议。大家的意见都很好

a_file = open(r'c:\a.csv', 'r')
b_file = open(r'c:\b.csv', 'r')

a_list = a_file.read().splitlines()
b_list = b_file.read().splitlines()

a_file.close()
b_file.close()

"""
Here, I am declaring 2 sets and then clear them of their 
values before storing the values from the lists.  
If I didn't do it this way, Python would think these were 
DICTIONARY datatypes instead and produce an syntax error.
"""

a_set = {1} #Just to get the program to recognize it as a set.
b_set.clear() #Then clear the data so that it is empty but stays as a set datatype.
a_set = {1}
b_set.clear()

a_set.update(a_list)
b_set.update(b_list)

difference_list = a_set.difference(b_set)

您可以应用
set
当场将列表转换为集合。所以这就足够了:

a_文件=打开(r'c:\a.csv,'r')
b_file=open(r'c:\b.csv,'r')
a_set=set(a_file.readlines())
b_set=set(b_file.readlines())
a_file.close()文件
b_file.close()文件
差异列表=a集合。差异(b集合)
但我也建议应用
with
语句来执行基本的文件操作(打开、关闭等),并确保在几乎出现任何异常的情况下,它们都将正确关闭。在这种情况下,代码将如下所示:

将open(r'c:\a.csv,'r')作为\u文件,将open(r'c:\b.csv,'r')作为b\u文件:
a_set=set(a_file.readlines())
b_set=set(b_file.readlines())
差异列表=a集合。差异(b集合)
只需在列表周围包装一个
set()

def readfile(fn):
    with open(fn, 'r') as fh:
        return fh.read().splitlines()

diff = set(readfile("file1.txt")).difference(set(readfile("file2.txt")))

您可以使用
set()
方法将列表转换为集合<代码>设置(列表)。您正在使您的简单程序复杂化,因此,不要执行上述操作。。。我可以简单地这样做…a_set=set(a_列表)。这要容易得多。谢谢你的提示!请注意,您可以使用
set()
获得一个空集。您不需要对它调用
clear()
.difference()
方法将自动将一个Iterable转换为一个set。因此,您可以将最后一行简化为
diff=set(readfile(“file1.txt”)).difference(readfile(“file2.txt”))
。很好,我喜欢您在示例中使用函数的方式。非常感谢!我喜欢这个套餐,谢谢!再次感谢您的宝贵知识。今天我学到了很多。@Dgun谢谢你准备了一个带有代码示例的问题。你提供给我们的所有信息总是更容易得到帮助。