Как отсортировать порты с помощью Python

Всем доброго времени суток! Имеется файл .txt со списком

ip:port
178.237.187.66:53389
82.116.48.210:50000
213.184.149.46:60000
109.74.133.46:4455
78.110.245.206:3398
89.109.52.230:1001
88.135.48.69:3398
84.201.142.138:50000
89.250.150.68:50000
109.195.115.45:2020
46.172.46.206:50001
95.80.124.61:43389
46.172.62.46:60000
62.33.157.26:2020
80.243.1.242:63389
212.220.203.147:55555
185.78.29.72:63389
37.195.232.8:4489
178.49.148.75:60000
87.103.201.134:3398

Как мне разделить по портам, в отдельные файы 3398.txt, 4489.txt, и т.д


Ответы (2 шт):

Автор решения: Tehnorobot

Если у вас не получится, то могу предложить данное решение:

  1. Создание файла и его открытие на чтение (в коде я добавил обращение к файлу через переменную file (можно назвать переменную по-другому)):
with open('file1.txt') as file:
  1. file.read() - читаю содержимое файла,

    file.read().split('\n') - разделяю строки по символу \n и привожу к списку,

    далее через for итерируюсь по списку. Я применил enumerate(), чтобы автоматически получить индекс элемента последовательности. Данная функция позволяет избавиться от необходимости инициировать и обновлять отдельную переменную-счётчик. (k - индекс, i - элемент).

for k, i in enumerate(file.read().split('\n')):
  1. Так как первая строка в файле - ip:port, то просто в условии игнорируем первую строку (индексация элементов начинается с 0)
if k != 0:
  1. Разделяем строку, получаем последний элемент и дописываем .txt: 178.237.187.66:53389 -> 53389 -> 53389.txt
name_file = str(i.split(":")[-1].strip()) + '.txt'
  1. Создаём файл, именуем его и открываем на запись
file_2 = open(name_file, 'w')
  1. Записываем в файл первый элемент из списка: ['178.237.187.66', '53389'] -> '178.237.187.66' и закрываем файл
file_2.write(i.split(':')[0])
file_2.close()

Полный код:

with open('file1.txt') as file:
    for k, i in enumerate(file.read().split('\n')):
        if k != 0:
            name_file = str(i.split(":")[-1].strip()) + '.txt'
            file_2 = open(name_file, 'w')
            file_2.write(i.split(':')[0])
            file_2.close()
→ Ссылка
Автор решения: SergFSM

попробуйте такой вариант (правда нужен pandas):

import pandas as pd

df = pd.read_csv('ports.txt',sep=':')  # здесь путь к файлу

for port,ip in df.groupby('port'):
    ip.to_csv(f'{port}.txt',sep=':',index=False)  # перед {port} укажите путь к папке
→ Ссылка