簡體   English   中英

結合readline()和for循環而不在python中使用next()

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM