合并的ReadLine()和不循环使用Python中的next()(Combining readli

2019-10-18 12:31发布

我想要的文件夹中读取多个文本文件来绘制每个文件的特定列(最后一列)。 我用下面的代码来做到这一点:

file_library = os.listdir(path)
for book in file_library:
 file = os.path.join(path, book)
  if file.endswith(".txt"):
    f = open(file, "r")
        for line in f:
            reads = read_ydata(f)
                print reads
        f.close()

其中read_ydata函数定义如下:

y_values = []
line = filename.readline()
while line != '':
 y_val = line[line.rfind(' ') + 1:]
 y_values.append(float(y_val))
 line = filename.readline()
return y_values

现在,当我运行此我得到一个错误:ValueError异常:混合迭代和阅读方法将会导致数据丢失,如果我将其替换为下一个()我得到的错误:StopIteration异常。

至于如何PLZ建议摆脱这些错误的或实现我的逻辑..

Answer 1:

使用 next()和循环, 使用.readline()但不要混用两种。

使用文件对象为迭代创建将创造什么位置,下一个混乱的内部缓冲区.readline()将读取(不使用缓冲)。

只要使用next(filename) ,而不是filename.readline()你是好。

两者next().readline()返回符合包括换行符,请确保你带空格的行,你测试空字符串之前。

请注意,您可以使用.rsplit()从行的末尾分出一个值:

y_val = line.rsplit(None, 1)[-1]

或使用.rpartition()

y_val = line.rpartition(' ')[-1]

您的功能并不需要使用while循环; 你也可以只使用for循环,并打破当线是空的:

y_values = []
for line in filename:
    if not line.strip():
        return y_values
    y_val = line.rsplit(None, 1)[-1]
    y_values.append(float(y_val))


文章来源: Combining readline() and for loop without using next() in python