[英]Combining readline() and for loop without using next() in python
我正在嘗試讀取文件夾中的多個文本文件以繪制每個文件的特定列(最后一列)。 我使用以下代碼來做到這一點:
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建議..
請使用 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))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.