Как преобразовать один элемент BYTE, разделенный запятыми, в большее количество элементов списка - PullRequest
1 голос
/ 09 апреля 2020
with open('out.txt', 'r+') as f:
    data = mmap.mmap(f.fileno(),0)
    ips = re.findall(b"(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})", data)[0].split(b",")
    print(ips)

Эта часть кода открывает файл, содержащий тонны строк, и это регулярное выражение находит ips в этом файле. (Я использую mmap, чтобы избежать ошибки памяти)

Это список "ips", как вы можете видеть, имеет только один элемент, ips которого разделены запятыми:

[b'41.39.180.122', b'192.28.64.246', b'213.82.176.107', b'3.120.158.39', b'5.189.139.56', b'178.128.36.166', b'203.117.94.11', b'5.79.119.182', b'52.48.41.230', b'81.169.129.6', b'178.114.8.24', b'67.20.116.110', b'205.201.139.164', b'180.215.241.68', etc etc ]

Я пытался использовать split (b ","), но у меня есть этот вывод, первый IP-адрес печатается правильно, но затем ...

['41.39.180.122']
[
b
'

8
0

'
,

etc etc

Редактировать (исправлено):

with open('out.txt', 'r+') as f:
    data = mmap.mmap(f.fileno(),0)
    ips = re.findall(b"(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})", data)
    ipsn = []
    for ip in ips:
        ip = ip.split(b",")
        ipsn.append(ip)
    print(ipsn)

1 Ответ

2 голосов
/ 09 апреля 2020

Если вы хотите разбить объект байтов, вам нужно использовать разделитель байтов вместо строкового. Поэтому вместо .split(",") следует использовать .split(b",").

https://docs.python.org/3/library/stdtypes.html#bytes .split

...