元類看不進(jìn)去
然后 既然我在看路徑的時(shí)候接觸了os內(nèi)庫(kù)
那就讓我來(lái)看看IO編程吧 比較好理解..
Python內(nèi)置的os模塊可以直接調(diào)用操作系統(tǒng)提供的接口函數(shù)
所以我覺得io模塊就可以看成是可以直接調(diào)用內(nèi)存提供的接口函數(shù)
讀寫之類的具體操作方法我在內(nèi)置函數(shù)篇下面已經(jīng)寫過啦,所以這里只補(bǔ)充之前不知道噠~
1.使用with語(yǔ)句操作文件IO是個(gè)好習(xí)慣樊展。
with 語(yǔ)句適用于對(duì)資源進(jìn)行訪問的場(chǎng)合,確保不管使用過程中是否發(fā)生異常都會(huì)執(zhí)行必要的“清理”操作饶号,釋放資源,比如文件使用后自動(dòng)關(guān)閉嘹吨、線程中鎖的自動(dòng)獲取和釋放等叠穆。python with的相關(guān)知識(shí)
然而我只看了我這里用到的一種用法。
值得注意的是:
我在寫入文件的時(shí)候厅须,是重新開始寫而不是在后面添加,且會(huì)返回字符數(shù)
但是為什么調(diào)用stringIO的時(shí)候 就可以輸出一整串呢食棕?
代碼如下:
>>> with open('Desktop/python/test.py','r') as f:
... f.read()
...
"#!/usr/local/Cellar/python3/3.6.1/bin/python3\n\ndef m(x):\n print('1')\n return 3*x\n print('6')\n\na = m(10) #輸出1\nprint('分割')\nprint(a) #輸出30\nprint('分割')\nm(10) #輸出1\nprint('分割')\nprint(m(10)) #輸出 1 30\n\n"
>>> with open('Desktop/python/test.py','w') as f:
... f.write("測(cè)試")
...
2```
然后我的文件里就只有測(cè)試兩個(gè)字啦
from io import StringIO
f = StringIO()
f.write('Hello')
5
f.write(' ')
1
f.write('world')
5
print(f.getvalue())
Hello world```
然后我就這樣測(cè)試了一下
>>> with open('Desktop/python/test.py','w') as f:
... f.write("測(cè)試")
... f.write('再一次測(cè)試')
...
2
5
>>> f.write('test')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: I/O operation on closed file.
>>>```
2.我的理解猜想:
stringio在import的時(shí)候被打開朗和,可以多次傳入數(shù)據(jù),在被讀取以后就重新變成了空的簿晓,相當(dāng)于我們把內(nèi)存里的東西取出來(lái)了眶拉,就空啦。
文件的w狀態(tài)相當(dāng)于創(chuàng)建了一個(gè)內(nèi)存憔儿,往內(nèi)存中輸入數(shù)據(jù)忆植。結(jié)束w的時(shí)候把內(nèi)存中的數(shù)據(jù)全部輸入文件然后兩者均關(guān)閉,且文件中的原數(shù)據(jù)都會(huì)沒掉,因?yàn)檩斎霑r(shí)會(huì)整個(gè)代替掉朝刊。讀取的時(shí)候也是如此耀里,反一反,把文件中的數(shù)據(jù)弄到內(nèi)存中拾氓,調(diào)出來(lái)讀一遍以后就沒掉啦冯挎。
嘗試一下,果然咙鞍,只要不close房官,readline()、read(size)就會(huì)繼續(xù)往后面讀续滋,否則就從頭開始翰守。
4.readlines中的strip說(shuō)是去掉換行符,但以前學(xué)的是去掉空格啊 于是我做了以下嘗試
line = ['123','222','231']
for a in line:
... print(a)
...
123
222
231
line = ['123\n','222\n','231\n']
for a in line:
... print(a)
...
123
222
231
line = ['123\n','222\n','231\n']
for a in line:
... print(a.strip())
...
123
222
231
所以strip()不僅可以去掉空格吃粒,還可以去掉換行符潦俺,制表符拒课。