1

我正在尝试读取文件夹中的多个文本文件以绘制每个文件的特定列(最后一列)。我已经使用以下代码来做到这一点:

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:混合迭代和读取方法会丢失数据,如果我用 next() 替换它,我得到错误:StopIteration。

请就如何摆脱这些错误或实现我的逻辑提出建议..

4

1 回答 1

3

使用其中一个 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))
于 2013-08-16T16:38:05.137 回答