上面這種方法“無論如何”都讀不出f的內容,使用readlines和迴圈也不行。 但是,用以下的方法,卻可以“正常讀取”: 這是為什麼呢? PS:遇到問題沒人解答?需要Python學習資料?可以加點擊下方鏈接自行獲取 note.youdao.com/noteshare?id=2dce86d0c2588 ...
from io import StringIO;
f = StringIO();
f.write('Hello World');
s = f.readline();
print s;
上面這種方法“無論如何”都讀不出f的內容,使用readlines和迴圈也不行。
但是,用以下的方法,卻可以“正常讀取”:
from io import StringIO;
f = StringIO('Hello World');
s = f.readline();
print s;
這是為什麼呢?
PS:遇到問題沒人解答?需要Python學習資料?可以加點擊下方鏈接自行獲取
note.youdao.com/noteshare?id=2dce86d0c2588ae7c0a88bee34324d76
這是因為the stream position的原因,當你用:
d = StringIO('Hello World')
其stream position為0(可以通過d.tell()獲得),而後執行:
d.readline()
stream position移動到11.因此當我們再次執行d.readline()時,返回的是空字元串。演示見圖:
類似的,使用:
f = StringIO()
stream position也為0,但執行了:
f.write('Hello World')
之後,stream position就移動到11了,因此此時你再執行readline時返回的依舊是空字元串。
當然咯,既然這個讀取是和stream position的位置有關係,那麼要能夠在當前情況下還能讀取'Hello World!',我們可以調整這個指針的位置,執行:
f.seek(0)
再進行讀取操作,即可。
下麵利用BytesIO進行演示,是一樣的道理: