[英]How to get next line in a file within a for loop without changing iteration
我正在做一個練習,它接收一個包含服務器機房溫度數據的文件,我想打印出所有年份的平均溫度。 所以我需要獲取文件中的下一行以確定下一年是什么。 我嘗試了 next() 但這會強制 for 循環到 go 到下一次迭代。 我需要第一行和第二行,然后移動到第二行並獲得第三行,等等。
這是代碼的一部分:
with open("THUMlog.txt", "r") as file:
for line in file:
if line == "#DATE TIME TEMPERATURE UNIT HUMIDITY%\n":
continue
stripped_line = line.rstrip().split()
next_line = next(file, "").rstrip().split()
print(f"Stripped: {stripped_line}")
print(f"Next: {next_line}")
Output 的部分(非常大的文件):
Stripped: ['9/28/2010', '15:45:14', '22.248900', 'C', '44.721968']
Next: ['9/28/2010', '16:00:07', '22.738900', 'C', '50.539993']
Stripped: ['9/28/2010', '16:15:07', '23.388900', 'C', '49.339338']
Next: ['9/28/2010', '16:30:07', '23.918900', 'C', '47.539280']
Stripped: ['9/28/2010', '16:45:08', '23.668900', 'C', '40.700378']
Next: ['9/28/2010', '17:00:07', '23.438900', 'C', '40.130996']
Stripped: ['9/28/2010', '17:15:07', '23.188900', 'C', '40.546257']
Next: ['9/28/2010', '17:30:07', '23.038900', 'C', '40.361183']
Stripped: ['9/28/2010', '17:45:07', '22.978900', 'C', '40.356943']
Next: ['9/28/2010', '18:00:08', '22.808900', 'C', '40.239134']
Stripped: ['9/28/2010', '18:15:07', '22.748900', 'C', '40.329383']
Next: ['9/28/2010', '18:30:07', '22.588900', 'C', '40.347069']
所以基本上,第一個 Next 應該是與第二個 Stripped 相同的列表。 我嘗試將所有這些列表連接到一個列表中,這樣我就可以通過索引輕松地獲得下一個列表,但是我超過了時間限制可能是因為我有 2 個 for 循環,一個循環遍歷整個文件,將行拆分為一個列表,然后附加到另一個列表。 然后另一個循環遍歷列表列表。 這有效地使時間加倍。 這是我的編程課程中的一項額外練習,它是在運行和檢查您的解決方案的軟件中完成的。
您在循環和使用中都使用了單個迭代器next
。 這可能會讓人感到困惑。 想一想:
i
, line
是 line k
並且next_line
是 line k+1
。i+1
時, line
現在是行k+2
。您需要在迭代之間傳遞/保存一行。 使用每行中連續數字的示例文件:
1
2
3
...
使用代碼:
with open("text.txt") as file:
line = next(file)
for next_line in file:
print(line.strip())
print(next_line.strip())
print("---")
line = next_line
會給:
1
2
---
2
3
---
3
4
---
...
您可以在每次迭代結束時的更新時單獨跟蹤上一行:
prev_line = None
with open("THUMlog.txt", "r") as file:
for line in file:
if line == "#DATE TIME TEMPERATURE UNIT HUMIDITY%\n":
continue
stripped_line = line.rstrip().split()
if prev_line:
print(f"Stripped: {prev_line}")
print(f"Next: {line}")
prev_line = line
先用數據讀取第一行,然后在循環中讀取 rest,同時跟蹤上一行。
with open("THUMlog.txt", "r") as file:
previous_line = file.readline()
if previous_line = "#DATE TIME TEMPERATURE UNIT HUMIDITY%\n":
previous_line = file.readine()
for current_line in file:
# do whatever with current and previous lines
previous_line = current_line
您可以通過在當前文件中倒帶 position 來執行此操作。
with open(...) as fh:
pos = fh.tell() # This is where we want to go back to
# Do what ever you want such as read lines.
if INEEDTOGOBACK:
fh.seek(pos)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.