簡體   English   中英

python如何從文件中讀取行

[英]How does python read lines from file

考慮以下簡單的python代碼:

f=open('raw1', 'r')
i=1
for line in f:
    line1=line.split()
    for word in line1:
        print word,
print '\n'

在第一個for循環(即“ for line in f:”)中,python如何知道我要讀取一行而不是單詞或字符?

第二行更加清晰,因為第1行是一個列表。 因此,第二個循環將遍歷列表元素。

Python具有所謂的“可迭代”的表示法。 它們是知道如何讓您遍歷它們所擁有的某些數據的東西。 一些常見的迭代器是列表,集合,字典,幾乎每個數據結構。 文件也不例外。

從事態發展成為迭代是通過定義一個方法用一個返回一個對象next方法。 next方法應被重復調用,並每次返回下一個數據。 for foo in bar循環中的for foo in bar實際上只是在幕后反復調用next方法。

對於文件, next方法返回行,僅此而已。 它並不“知道”您想要線條,而只是總是要返回線條。 這樣做的原因是,大約有50%的涉及文件遍歷的案例都是按行排列的,如果您需要文字,

 for word in (word for line in f for word in line.split(' ')):
     ...

效果很好。

在python中, for..in語法用於可迭代對象(可以迭代的元素)。 對於文件對象,迭代器是文件本身。

請參考此處next()方法的文檔-摘錄如下:

文件對象是其自己的迭代器,例如iter(f)返回f(除非關閉f)。 當文件用作迭代器時,通常在for循環中(例如,對於f中的行:打印行),將重復調用next()方法。 此方法返回下一個輸入行,或在打開文件進行讀取時(如果打開文件則為EOF)(在打開文件進行寫入時行為未定義),則引發StopIteration。 為了使for循環成為遍歷文件行的最有效方法(一種非常常見的操作),next()方法使用了隱藏的預讀緩沖區。 使用預讀緩沖區的結果是,將next()與其他文件方法(如readline())結合使用是不正確的。 但是,使用seek()將文件重新定位到絕對位置將刷新預讀緩沖區。 2.3版的新功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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