Как перебрать файл в Python27 без запуска ValueError и полностью перебрать файл с пустыми строками? - PullRequest
0 голосов
/ 13 марта 2019

У меня, по сути, та же проблема, что и у этого парня: человек, также имеющий проблемы с итерацией

В зависимости от того, что я изменяю, я либо столкнусь с IOError, ValueError (когда я используюa для каждого, чтобы перебрать каждую строку в файле и прочитать с помощью readline ()), или программа работает, но она обрезает мои данные, когда есть пустая строка.Я также попытался использовать для каждого цикла, чтобы перебрать файл с помощью .next () вместо readline, но это пропускает практически все остальные строки в моем наборе данных.Я считаю, что верхний комментарий имеет решение моего вопроса, за исключением того, что в моем текстовом файле будут пустые строки, что слишком рано завершает цикл while.Как лучше обойти это?Есть ли лучшая структура данных для использования, или мне нужно как-то разобрать мой файл, чтобы удалить пустые строки?

Вот сегмент моего кода, я использую .rstrip (), чтобы избавиться от новой строкисимволы в конце каждой строки:

f = open(self.path,'r')
    while True:
        line = f.readline().rstrip()
        temp_lines_list.append(line)
        if not line:
            break

Пример ввода:

text1 : 2380218302
test2 : sad
test3 : moresad (very)
yetanothertest : more datapoints

wowanewsection: incredible

Надеюсь, это поможет, спасибо:)

Ответы [ 2 ]

1 голос
/ 13 марта 2019

Метод readline() возвращает строку с завершающим символом новой строки, даже в пустой строке.Вы должны проверить, является ли строка пустой перед тем, как ее убрать:

while True:
    line = f.readline()
    if not line:
        break
    temp_lines_list.append(line.rstrip())

Тем не менее, в Python более идиоматично использовать объект файла как итеративный для итерации по строкам файла, так чтовам не нужно самостоятельно управлять итерациями.

for line in f:
    temp_lines_list.append(line.rstrip())
1 голос
/ 13 марта 2019

Вы пробовали что-то вроде этого:

lines_output = []
with open('myFile.txt', 'r') as file: # maybe myFile.txt == self.path??
    for line in file.readlines(): # we use readlines() instead of readline() so we iterate entire file
        stripped_line = line.strip()
        if stripped_line not '':
            lines_output.append(stripped_line) # save info if line is not blank
        else:
            pass # if line is blank just skip it
...