Python

Помогите запись это в файл.

Мне нужно чтоб выдавало только Name или записать в файл отдельный.
А скорее нет в любом случае мне нужно записать это в отдельный текст name.

 

def players(address, timeout=DEFAULT_TIMEOUT, encoding=DEFAULT_ENCODING):
return request_sync(address, timeout, encoding, PlayersProtocol)

async def aplayers(address, timeout=DEFAULT_TIMEOUT, encoding=DEFAULT_ENCODING):
return await request_async(address, timeout, encoding, PlayersProtocol)


class PlayersProtocol:
@staticmethod
def validate_response_type(response_type):
return response_type == A2S_PLAYER_RESPONSE

@staticmethod
def serialize_request(challenge):
return b"\x55" + challenge.to_bytes(4, "little")

@staticmethod
def deserialize_response(reader, response_type, ping):
player_count = reader.read_uint8()
resp = [
Player(
index=reader.read_uint8(),
name=reader.read_cstring(),
score=reader.read_int32(),
duration=reader.read_float()
)
for player_num in range(player_count)
]
return resp
Murat Tashmet
Murat Tashmet
1 075
Для записи только имени игрока или записи в отдельный файл с именем игрока, вам нужно внести следующие изменения в код:

 def players(address, timeout=DEFAULT_TIMEOUT, encoding=DEFAULT_ENCODING):  
return request_sync(address, timeout, encoding, PlayersProtocol)

async def aplayers(address, timeout=DEFAULT_TIMEOUT, encoding=DEFAULT_ENCODING):
return await request_async(address, timeout, encoding, PlayersProtocol)


class PlayersProtocol:
@staticmethod
def validate_response_type(response_type):
return response_type == A2S_PLAYER_RESPONSE

@staticmethod
def serialize_request(challenge):
return b"\x55" + challenge.to_bytes(4, "little")

@staticmethod
def deserialize_response(reader, response_type, ping):
player_count = reader.read_uint8()
resp = [
Player(
index=reader.read_uint8(),
name=reader.read_cstring(),
score=reader.read_int32(),
duration=reader.read_float()
)
for player_num in range(player_count)
]

# Запись имен игроков в отдельный файл
with open("name.txt", "w") as file:
for player in resp:
file.write(player.name + "\n")

return resp
После внесения этих изменений, имена игроков будут записываться в отдельный файл "name.txt". Каждое имя будет записано на новой строке.
Anton Tsilin
Anton Tsilin
14 273
Лучший ответ
Чтобы сохранить только имена игроков в отдельный текстовый файл, нужно выполнить несколько шагов:

1. Измените функцию `deserialize_response` так, чтобы она возвращала только имена игроков.
2. Используйте эту функцию для получения имен игроков.
3. Запишите результаты в файл.

Вот изменённая функция `deserialize_response` и новая функция для записи имен в файл:

```python
class PlayersProtocol:
# ... другие методы ...

@staticmethod
def deserialize_response(reader, response_type, ping):
player_count = reader.read _uint8()
player_names = [ reader.read _cstring() for player_num in range(player_count)]
# Пропустите другие поля для каждого игрока
for player_num in range(player_count):
reader.read _uint8() # пропустить index
reader.read _int32() # пропустить score
reader.read _float() # пропустить duration
return player_names

def write_names_to_file(address, filename="player_names.txt", timeout=DEFAULT_TIMEOUT, encoding=DEFAULT_ENCODING):
player_names = players(address, timeout, encoding) # Используйте функцию players для получения списка имен игроков
with open(filename, 'w', encoding=encoding) as f:
for name in player_names:
f.write(name + '\n')
```

Теперь вы можете вызвать функцию `write_names_to_file` с нужным адресом, и имена будут сохранены в указанный файл.
Akuma O Samayou
Akuma O Samayou
6 758