Как написать эффективный код readline на Python - PullRequest
0 голосов
/ 29 марта 2019

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

Итак, у меня есть что-то похожее на это:

name_list = []
rating_list = []
price_list = []
cuisine_list = []
end_list = []

filename = '/Users/anqixiao/Desktop/restaurant recommendation/restaurants_small.txt'
file = open(filename, 'r')
line = file.readline()

while line != '':
    name_list.append(line.strip('\n'))
    rating_list.append(line.strip('\n'))
    price_list.append(line.strip('\n'))
    cuisine_list.append(line.strip('\n'))
    end_list.append(line.strip('\n'))
file.close()

Однако Python Shell уже перестал отвечать, когда я вручную входил в цикл while.Может кто-то проливает свет на то, где я ошибся?Буду очень признателен!

Большое спасибо.

Ответы [ 4 ]

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

читать файл следующим образом:

with open(filename, 'r') as f:
    for line in f:
        #do something

если в каждой строке есть каждый элемент, например: «имя, рейтинг, цена, кухня, конец», вы можете использовать split, чтобы получить элементы
, еслиСтрока содержания типа: «имя \ n рейтинг \ n цена \ n кухня \ n конец», это может быть работ

with open(filename, 'r') as f:
    for idx, line in enumerate(f):
        line = line.strip('\n')
        if idx % item_nums == 0:
            name_list.append(line)
        # other case
0 голосов
/ 29 марта 2019

Даже более надежный подход:

name_list = []
rating_list = []
price_list = []
cuisine_list = []
end_list = []

filename = '/Users/anqixiao/Desktop/restaurant recommendation/restaurants_small.txt'

with open (filename, 'r') as file:
    lines = file.readlines()


for line in lines:
    if line != '':
        name_list.append(line.strip('\n'))
        rating_list.append(line.strip('\n'))
        price_list.append(line.strip('\n'))
        cuisine_list.append(line.strip('\n'))
        end_list.append(line.strip('\n'))

Используя это, вы разрешаете файлу иметь пустые строки и просто пропускаете их.Но, как указано в моем комментарии, ваша настоящая проблема - бесконечный цикл while.

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

line относится к первой строке документа.При условии, что это не пустая строка, она всегда будет истинной, если не будет изменена.Чтобы изменить его для каждой новой строки, вы можете просто поместить line = file.readline() в конце цикла while

. Обратите внимание, что file.readlines() будет считывать место каждой строки в file в списке.file.readlines().splitlines() может сделать для вас зачистку

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

line = file.readline() будет читать строку из текстового файла, но когда вы вошли в цикл while, вы больше не читаете остальные строки и вы входите в бесконечный цикл. Вот почему вы получаете ошибки. поместите строку = file.readline() внутри цикла while , после while line != '':

...