Открытие 2 файлов и присвоение им 2 наборов в Python 3 - PullRequest
2 голосов
/ 03 августа 2020

Вот мой пример кода. Оно работает. Но я уверен, что есть более простой способ хранить значения в наборе. Я знаю только, как сначала сохранить их в списке, а затем передать в набор. Причина, по которой я помещаю их в наборы, заключается в том, чтобы воспользоваться преимуществом метода 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)

Ответы [ 2 ]

5 голосов
/ 03 августа 2020

Просто оберните список set().

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

diff = set(readfile("file1.txt")).difference(set(readfile("file2.txt")))
3 голосов
/ 03 августа 2020

Вы можете применить set для преобразования списка в набор на месте. Так что этого будет достаточно:

a_file = open(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()

difference_list = a_set.difference(b_set)

Но я бы также рекомендовал применить оператор with для выполнения базовых c файловых операций (open, close, et c) и убедиться, что в случае почти любые исключения они все будут закрыты должным образом. В этом случае код будет выглядеть так:

with open(r'c:\a.csv', 'r') as a_file, open(r'c:\b.csv', 'r') as b_file:
    a_set = set(a_file.readlines())
    b_set = set(b_file.readlines())

difference_list = a_set.difference(b_set)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...