Как Python читает строки в файле .txt и разбивает их на список? - PullRequest
0 голосов
/ 01 ноября 2018

Поэтому у меня возникают проблемы с пониманием того, как Python создает списки, используя строковый метод .split (), если бы я дал ему файл для чтения.

Здесь у меня есть текстовый файл с населением из трех разных стран, который называется pop.txt:

United-States 325700000
Canada        37000000
China         13860000000

и в другом .py файле у меня есть этот код:

populationFile = open("population.txt", 'r')

for populationLine in populationFile:
    populationList = populationLine.split()

print(populationList)

populationFile.close()

Вывод такой:

['China', '13860000000']

По сути ли python помещает каждую страну и соответствующее население в отдельные списки, читая каждую строку , как это было с Китаем, или это символ? Кроме того, почему здесь появляется только один список, а не все?

Извините за все вопросы, но я буду очень благодарен всем, кто может помочь:)

Ответы [ 3 ]

0 голосов
/ 01 ноября 2018

почему здесь появляется только один список, а не все?

populationList изменяется после каждой итерации и теряет (перезаписывая) свое более раннее значение.

Вместо этого вы должны попробовать это:

for populationLine in populationFile:
    populationList.append(populationLine.split()) 
0 голосов
/ 01 ноября 2018

Что вы делаете, это устанавливаете значение для popList поверх предыдущей итерации. таким образом, оно разделяет население Соединенных Штатов, затем разделяет население Канады и сохраняет его над Соединенными Штатами, а затем Китай заменяет Канаду.

Что вы можете сделать это добавить;

populationFile = open("population.txt", 'r')
populationList = [] # create an empty list

for populationLine in populationFile:
    populationList.append(populationLine.split()) # append the split string into list

print(populationList)

populationFile.close()

Если вы хотите оптимизировать это, вы можете использовать блок с. Это будет выглядеть так:

with open("population.txt", 'r') as populationFile:
    populationList = [] # create an empty list

    for populationLine in populationFile:
        populationList.append(populationLine.split()) 

print(populationList)

Это только открывает файл временно и когда блок с завершен, он закрывает его автоматически.

0 голосов
/ 01 ноября 2018

Вам нужно изменить код на этот

populationFile = open("population.txt", 'r')

temp = None   
# create an empty list
populationList = []

for line in populationFile:
    # split into different words by the space ' ' character
    temp = line.split()  # temp = ['Canada', '37000000'] or ['China', '13860000000']

    # if spaces exist on either the right or left of any the elements in the temp list
    # remove them
    temp = [item.strip() for item in temp[:]]

    # append temp to the population list
    populationList.append(temp)

print(populationList)

populationFile.close()
...