這個問題有兩個方面: 背景:我有2個大文件,文件1的每一行是「AATTGGCCAA」,文件2的每一行是「AATTTTCCAA」。每個文件都有20000行,我有一個python代碼,我必須依次在每對行上運行。首先,你將如何着手讓Python代碼在每個文件的同一行號上運行,例如:這兩個文件的第1行? 其次,如何在第1行上運行後,讓文件在兩個文件中向下移動到第2行?使python程序逐行同步讀取2個文件並在每行上執行程序
回答
文件對象是迭代器。你可以將它們傳遞給任何期望可迭代對象的函數,它將起作用。對於您的特定用例,您希望使用zip
內置函數,它並行地遍歷多個對象,並從每個迭代中產生具有一個對象的元組。
with open(filename1) as file1, open(filename2) as file2:
for line1, line2 in zip(file1, file2):
do_something(line1, line2)
在Python 3 zip
是一個迭代,所以這是有效的。如果您需要在Python 2中執行相同的操作,則可能需要使用itertools.izip
,因爲常規的zip
會導致將這兩個文件中的所有數據先讀入列表中。
文件對象是迭代器。您可以打開它們,然後在該對象上調用.next()以獲取下一行。一個例子
For line in file1:
other_line = file2.next()
do_something(line, other_line)
下面的代碼使用兩個Python特徵:
1.發電機用作迭代
def get_line(file_path):
# Generator function
with open(file_path) as file_obj:
for line in file_obj:
# Give one line and return control to the calling scope
yield line
# Generator function will not be executed here
# Instead we get two generator instances
lines_a = get_line(path_to_file_a)
lines_b = get_line(path_to_file_b)
while True:
try:
# Now grab one line from each generator
line_pair = (next(lines_a), next(lines_b))
except StopIteration:
# This exception means that we hit EOF in one of the files so exit the loop
break
do_something(line_pair)
假設代碼是包裹在do_something(line_pair)
功能處理
2.文件對象,該對象接受長度爲2的元組,該元組保存這對線。
感謝您的支持!這一切都有道理,但我想知道哪個文件路徑應該放在腳本的第1行和第3行中?由於這兩個文件都是在第11行和第12行中調用的,所以我不太瞭解這部分。很高興瞭解發生器和迭代器。 – thh32
也許我沒有說清楚。你保持第1行和第3行完整 - 變量'file_path'應該保持原樣。在第11和12行中,您將路徑傳遞給您的文件。 – ElmoVanKielmo
這裏不需要'get_line'生成器。文件對象已經是一個迭代器,所以你可以簡單地調用'next'。 – Blckknght
下面是允許用戶從多個文件處理的同步行的代碼:
from contextlib import ExitStack
with ExitStack() as stack:
files = [stack.enter_context(open(filename)) for filename in filenames]
for lines in zip(*files):
do_something(*lines)
例如,對於2個文件它調用do_something(line_from_file1, line_from_file2)
對於每對在給定的文件的行。
- 1. 逐行讀取文件並在bash中執行每個操作
- 2. nodejs同步逐行讀取大文件?
- 3. 在Netbeans中逐步執行應用程序的執行路徑
- 4. 如何逐行讀取2個文件並在處理後編輯每行
- 5. Python:逐行閱讀,在每個結束行執行操作
- 6. 在android應用程序中逐行讀取文本文件
- 7. 逐行讀取並執行if命令
- 8. 在Windows上使用python執行程序
- 9. 使用python逐行讀取pdf文件
- 10. 執行Python程序
- 11. 異步逐行文件讀取
- 12. 使用python執行程序
- 13. 從文件讀取並執行按位操作的C++程序
- 14. 並行執行具有不同參數的相同Python程序
- 15. python執行遠程程序
- 16. Python程序如何從文件加載並讀取特定行?
- 17. 變化同步線程執行順序
- 18. 線程同步執行操作順序
- 19. 程序執行步驟
- 20. Python逐行讀取文件並打印進行調試
- 21. 即使文件不同,用C++逐行讀取文件也會輸出2行
- 22. 如何通過行讀取文件並執行每行與貓
- 23. 如何逐步運行Perl程序?
- 24. 以編程方式逐行跟蹤Python程序行/語句的執行
- 25. 從txt文件中逐行讀取並逐行分割
- 26. 如何使用Linux逐行讀取文件並在每一行添加'1'?
- 27. 逐行讀取TXT文件 - Python
- 28. 在不同的處理器中並行執行兩個程序
- 29. 逐行讀取文件並追加字
- 30. 在包中並行執行程序
+1。我發佈了[對任意數量文件的回答的泛化](http://stackoverflow.com/a/23505739/4279)。雖然在這種情況下沒有必要。 – jfs