Обработка файла типа CSV и создание нового вывода с использованием Python (или AWK)Python

Программы на Python
Anonymous
Обработка файла типа CSV и создание нового вывода с использованием Python (или AWK)

Сообщение Anonymous »

У меня есть файл linked_policies.txt, который выглядит следующим образом (небольшой образец данных):

Код: Выделить всё

0000001G|11111111
0000002G|10000018
0000002G|10000320
0000002G|10000337
0000002G|10000343
101359B|10000018
101359B|16023380
504529A|10000018
504529A|15856008
504529A|16007139
504529A|16007151
504529A|16526483
620667G|16526483
0000003G|22222222
0000003G|33333333
Первый столбец представляет «политику», а второй столбец представляет «клиент».
Политика 0000001G не связана ни с какими другими политиками, поскольку она содержит только один номер клиента не связан ни с какими другими политиками.
Аналогично, политика 0000003G не связана ни с какими другими политиками, поскольку она содержит два номера клиентов, не связанных ни с какими другими политиками.Все остальные полисы (0000002G, 101359B, 504529A и 620667G) считаются связанными друг с другом, поскольку, например, полис 0000002G напрямую связан с полисами 101359B и 504529A (поскольку все они имеют одного и того же клиента 10000018 ), но политика 0000002G также косвенно связана с политикой 620667G, поскольку, хотя они не разделяют номер клиента напрямую между собой, политика 620667G использует общего клиента 16526483 с политикой 504529A, и сама эта политика имеет общего клиента с 0000002G, поэтому все они считаются связанные политики.
Я хочу обработать входной файл и получить новый файл «output_file.txt», в котором для каждой политики политика указана в первом столбце и во втором столбце. (пробел между первым и вторым столбцом) указан список связанных политик(ов) (включая саму рассматриваемую политику). Например, в образце входного файла после обработки файл «output_file.txt» будет выглядеть следующим образом:

Код: Выделить всё

0000001G 0000001G
0000002G 0000002G|101359B|504529A|620667G
101359B 101359B|0000002G|504529A|620667G
504529A 504529A|0000002G|101359B|620667G
0000003G 0000003G
В первом столбце показан каждый уникальный номер политики (из входного файла), а во втором столбце показаны все политики, с которыми эта политика прямо или косвенно связана.
Ищу способ сделать это с помощью AWK или Python (обратите внимание, что доступная мне версия Python более ранняя, чем версия 3.6)
Мой (Python) Попытка сценария "linked_policies.py" выглядит следующим образом:

Код: Выделить всё

# Read the input data
with open('linked_policies.txt', 'r') as f:
lines = f.readlines()

# Create a dictionary to store the customers and their associated policies
customer_policies = {}

# Iterate through the lines
for line in lines:
# Split the line into policy and customer
policy, customer = line.strip().split('|')

# Add the customer to the customer_policies dictionary
if customer not in customer_policies:
customer_policies[customer] = set()
customer_policies[customer].add(policy)

# Create a dictionary to store the linked policies
linked_policies = {}

# Link policies based on shared customers
for customer, policies in customer_policies.items():
for policy in policies:
if policy not in linked_policies:
linked_policies[policy] = set(policies)
else:
linked_policies[policy].update(policies)

# Write the output to a file
with open('output_file.txt', 'w') as f:
for policy, linked_policies_set in linked_policies.items():
linked_policies_str = '|'.join(sorted(linked_policies_set))
f.write('{} {}\n'.format(policy, linked_policies_str))
Когда я запускаю это:

Код: Выделить всё

python ./linked_policies.py
....результирующий выходной файл "output_file.txt" выглядит следующим образом:

Код: Выделить всё

620667G 504529A|620667G
504529A 0000002G|101359B|504529A|620667G
0000003G 0000003G
0000002G 0000002G|101359B|504529A
101359B 0000002G|101359B|504529A
0000001G 0000001G
Вторая, третья и шестая строки верны.
Остальные строки неверны (первая, четвертая и пятая строки), поскольку это не так. правильно отображаются все связанные политики.

Подробнее здесь: https://stackoverflow.com/questions/785 ... hon-or-awk

Вернуться в «Python»