При добавлении строк из текстового файла в список он устанавливает целую строку в строку. Как распознать разные типы данных в текстовом файле? - PullRequest
2 голосов
/ 24 апреля 2019

Я создаю игру Pokémon, используя Python 3.7.0, и я делаю функцию сохранения / загрузки, используя текстовые документы. Каждая строка в текстовом файле содержит строку и целое число, и мне было интересно, есть ли способ узнать, что эти типы данных уже существуют, и добавить их в список, сохранив тип.

Подзадача, вызванная этим, заключается в том, что каждый символ в индексе рассматривается как отдельный индекс, а не каждая часть, разделенная запятой.

Я попытался разделить каждый тип данных на отдельной строке и добавить каждый отдельно, а затем проверить, содержит ли он цитаты или нет, но это просто оставляет меня с тем же результатом, который я получаю.

Каждая строка в текстовых файлах выглядит следующим образом («имя», уровень):

'charmander',12

'bulbasaur',7

'squirtle',13

Мой код для загрузки файла в список выглядит следующим образом:

path, dirs, files = next(os.walk("resources/saves")) # Read directory
fileCount = len(files)
while fileCount > 0:
    for filename in os.listdir("resources/saves"): # Iterates directory
    fileCount -= 1
    loadFile = open("resources/saves/%s" % (filename),"r")
    pokeCount = 6
    for line in loadFile:
        if pokeCount > 0:
            party.append(line.split()) # Adds first six Pokémon to the party
            pokeCount -= 1
        else:
            pc.append(line.split()) # Adds rest to the PC
            print("Game loaded!")

Получив вывод ниже, я попытался:

for i in party:
    for j in i:
        j.replace('\"','')
        print(j) # Test if each part is treated as an index

Однако я напечатал каждый символ на новой строке, как если бы каждый из них был новым индексом, а не имя и уровень, которые рассматриваются как два отдельных индекса.

Я ожидаю, что добавленный список будет выглядеть так:

[['charmander',12],['bulbasaur,7],['squirtle',13]]

Однако список, который я получаю:

[["'charmander','12'"],["'bulbasaur,'7'"],["'squirtle','13'"]]

Числа обрабатываются как строки, затем весь индекс обрабатывается как старшая строка. Я хотел бы, чтобы имя обрабатывалось как строка в первом индексе подсписка, а уровень - как целое число во втором индексе подсписка.

Спасибо всем, кто может это понять и кто может помочь!

1 Ответ

2 голосов
/ 24 апреля 2019

Вам не нужно использовать счетчик, просто проверьте длину списка продуктов - если он достигнет 6, прекратите синтаксический анализ файла.

Вам нужно разделить каждую строку вашего файла на , ипреобразовать уровень обратно в число - вы читаете строки из вашего файла:

Создать файл:

t = """
'charmander',12

'bulbasaur',7

'squirtle',13"""

Чтение и обработка файла:

with open("data.txt","w") as f: 
    f.write(t)

pokemons = []

with open("data.txt") as f:
    for line in f:          
        line = line.strip() # remove \n and other whitespaces
        if line:            # only process non empty lines
            try:
                poke, lvl = line.split(",")
            except ValueError:
                print("Unable to split line into 2 parts: ", line)
                continue

            try:
                lvl = int(lvl)                       # convert to int
            except ValueError:
                print("Unable to convert lvl to number: ", lvl)
                continue

            poke = poke.strip("'")               # get rid of the delimiting '

            # add to list of pokemons when all was ok   
            pokemons.append( [poke,lvl] )

        if len(pokemons) ==  6:
            break

print(pokemons) 

Вывод:

[['charmander', 12], ['bulbasaur', 7], ['squirtle', 13]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...