Python string split () вызывает ошибку индекса при чтении IRC - PullRequest
0 голосов
/ 26 марта 2019

Я создаю дерганного бота, чтобы читать чат в моей ленте.Но когда я пытаюсь .split () входящей строки на отдельные строки, чтобы изолировать имя пользователя и сообщение, он отображает дополнительные 'и ["'"].когда я пытаюсь распечатать строки отдельно по индексу, я получаю ошибку индекса.

Ниже приведен код, который отлично связывает чат с твиком, и результат, когда я набираю «test» в чате.

from settings import *
import socket
import threading

class twitch:
    def __init__(self, host, port, nick, pwd, channel):
        self.s = socket.socket()
        self.s.connect((host, port))
        self.s.send(bytes("PASS " + pwd + "\r\n", "UTF-8"))
        self.s.send(bytes("NICK " + nick + "\r\n", "UTF-8"))
        self.s.send(bytes("JOIN #" + channel + " \r\n", "UTF-8"))
        self.s.send(bytes("PRIVMSG #" + channel + " :" + "Connected " + "\r\n", "UTF-8"))
        self.alive = True

        readerthread = threading.Thread(target=self.read_chat)
        readerthread.start()

    def read_chat(self):
        while self.alive:
            for line in str(self.s.recv(1024)).split('\\r\\n'):
                if "PING :tmi.twitch.tv" in line:
                    print(time.strftime("%H:%M:%S"), "PONG :tmi.twitch.tv")
                    s.send(bytes("PONG :tmi.twitch.tv\r\n", "UTF-8"))
                else:
                    print(line)
                    parts = line.split(":")
                    print(parts)

def main():
    tc = twitch(HOST, PORT, NICK, PASS, CHANNEL)

Печать строки (строки) на консоли приводит к: b ': username! Username@username.tmi.twitch.tv PRIVMSG #username: test

Однако, когда я разделяюстрока и распечатывает список строк (частей), которые это производит: ["b" "," имя пользователя! имя_пользователя@username.tmi.twitch.tv PRIVMSG #username "," тест "] '["' "]

1 Ответ

0 голосов
/ 26 марта 2019

Вы читаете байты.Отсюда б '...'.
Что символ 'b' делает перед строковым литералом?


Преобразует его в строку, а затем обрабатывает ее.
Преобразовать байты в строку?


код по ссылке.

>>> b"abcde"
b'abcde'

# utf-8 is used here because it is a very common encoding, but you
# need to use the encoding your data is actually in.
>>> b"abcde".decode("utf-8") 
'abcde'
...