如何在Python27中遍历文件而又不会遇到ValueError并完全用空行遍历文件?

时间:2019-03-13 18:20:26

标签: python python-2.7 file loops valueerror

我基本上和这个人有同样的问题:person also having issues iterating

根据我所做的更改,我将遇到IOError,ValueError(当我分别使用a来遍历文件中的每一行,并使用readline()进行读取时),或者程序正常运行但会切入空行时关闭我的数据。我也尝试过使用for each循环通过.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 个答案:

答案 0 :(得分:1)

您尝试过这样的事情吗?

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

答案 1 :(得分:1)

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())