Как заставить цикл while распознать конец файла? - PullRequest
0 голосов
/ 27 октября 2018

У меня есть текстовый файл с данными, которые представляют Строка 1 имя, адрес электронной почты, телефон Линия 2 адрес Линия 3 целое число, которое говорит, сколько друзей в списке. Строка 4 ~ n Каждая строка состоит из имени

Я смог получить каждую строку с

line = infile.readline()

У меня проблема, когда я добираюсь до конца файла.

Он хочет повторить цикл, как будто он не распознает конец файла

infile = open(filename, "r")
lines = infile.readlines()

with open(filename) as infile:  
        line = infile.readline()
        count = 1
        while line:
            thisProfile = profile.Profile()          
            if count > 1:
                line = infile.readline()
                count += 1
            word = line.split()
            thisProfile.set_given_name(word[0])
            thisProfile.set_last_name(word[0])
            thisProfile.set_email_name(word[0])
            thisProfile.set_phone(word[0])

            ## LINE 2 -- ADDRESS
            line = infile.readline()
            count += 1
            thisProfile.set_address(line)

             ## LINE 3 -- GET FRIEND COUNT
             line = infile.readline()
             count += 1

             ## get all the friends and add them to the friends_list
             friendCount = int(line)
             thisProfile.set_number_friends(friendCount)
             friendList = []
             if friendCount > 0:
                 for allfreinds in range(0,friendCount):
                     line = infile.readline()
                     count += 1
                     friendList.append(line)
                 thisProfile.set_friends_list(friendList)

friends.txt

John Doe john.doe@hotmail.com 123456789
1 alltheway ave
1
Jane Doe
Paul Andrews paul.andrews@gmail.com 987654321
69 best street
0
Jane Doe jane.doe@facebook.com 159753456
1 alltheway ave
2
John Doe
Paul Andrews

Ответы [ 2 ]

0 голосов
/ 27 октября 2018

Вы можете использовать

for line in infiles.readline():
    *code*

вместо цикла while.

0 голосов
/ 27 октября 2018

Метод readline() возвращает пустую строку только при достижении EOF согласно документации , поэтому вы можете добавить условие, чтобы проверить, является ли line пустым (не истинным) сразу после вызова readline():

with open(filename) as infile:  
    while True:
        line = infile.readline()
        if not line:
            break
        thisProfile = profile.Profile()          
        word = line.split()
        thisProfile.set_given_name(word[0])

В качестве альтернативы вы можете использовать файловый объект в качестве итератора с циклом for вместо:

with open(filename) as infile:  
    for line in infile:
        thisProfile = profile.Profile()          
        word = line.split()
        thisProfile.set_given_name(word[0])
...