我正在尝试读取文件夹中的多个文本文件以绘制每个文件的特定列(最后一列)。我使用以下代码来做到这一点:
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。
关于如何摆脱这些错误或实现我的逻辑的Plz建议..
答案 0 :(得分:3)
使用 next()
并循环,或使用.readline()
,但不要混用两者。
将文件对象用作iterable会创建一个内部缓冲区,这会对下一个.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))