Я пытаюсь вставить данные из файла .txt в базу данных SQLite, но всякий раз, когда я запускаю свой код, я получаю эту ошибку: NameError: name 'get_value' is not defined
. Это потому, что я пытаюсь вызвать функцию в функции внутри класса? Я не включил другие части своего кода, потому что не думал, что они нужны, но если они дадут мне знать, я добавлю их.
Файл Python:
class InputFromIPLog:
...
def get_value():
info = item.strip().split(':')
val = info[1].strip().split(',')
return val[0].strip()
def insert_data():
with open(f"new_iplog.txt", "r") as f:
file_data = f.readlines()
input_gamertag = ""
input_ip_address = ""
input_xuid = ""
input_mid = ""
for item in file_data:
if "Gamertag" in item:
input_gamertag = get_value(item)
elif "IP Address" in item:
input_ip_address = get_value(item)
elif 'XUID' in item:
input_xuid = get_value(item)
elif 'MID' in item:
input_mid = get_value(item)
cursor.execute("INSERT INTO userinfo (gamertag, ip, xuid, mid) values(?, ?, ?)", (input_gamertag, input_ip_address, input_xuid, input_mid,))
...
Файл new_iplog.txt:
...
Gamertag: UnknownUser
IP Address: 10.0.0.1
XUID: 000301F23B9F6ED4
MID: FB00FDA037CEB46E
Gamertag: AnotherUnknownUser
IP Address: 1.1.1.1
XUID: 0009000005E96E9B
MID: FB00F5413910FEDD
...
Я не знаю, есть ли у вас другие атрибуты, связанные с экземпляром этого класса, но обычно для доступа к методам и атрибутам класса вы должны использовать self
.
Вот страница Введение в создание классов, которая описывает себя и то, как она используется.
С моим ограниченным представлением о вашей проблеме может сработать что-то вроде ниже:
class InputFromIPLog:
...
def get_value(self, item):
info = item.strip().split(':')
val = info[1].strip().split(',')
return val[0].strip()
def insert_data(self):
with open(f"new_iplog.txt", "r") as f:
file_data = f.readlines()
input_gamertag = ""
input_ip_address = ""
input_xuid = ""
input_mid = ""
for item in file_data:
if "Gamertag" in item:
input_gamertag = self.get_value(item)
elif "IP Address" in item:
input_ip_address = self.get_value(item)
elif 'XUID' in item:
input_xuid = self.get_value(item)
elif 'MID' in item:
input_mid = self.get_value(item)
cursor.execute("INSERT INTO userinfo (gamertag, ip, xuid, mid) values(?, ?, ?)",
(input_gamertag, input_ip_address, input_xuid, input_mid,))
...
Кроме того, в вашем коде get_value
не принимает параметров, но когда вы его используете, вы передаете ему item
. Я обновил аргументы функции в приведенном выше коде, чтобы отразить ваше использование.
Я не могу найти обман, но он наверняка существует, поэтому я не буду публиковать ответ. Однако для обращения к методу вам понадобится
self.get_value
. Имена методов сами по себе не входят в область видимости. Вам необходимо явно вызвать метод для экземпляра класса (в данном случаеself
).