Python學習之旅(二十二)

2022-07-31 23:54:12 字數 3582 閱讀 5234

讀寫檔案就是請求作業系統開啟乙個檔案物件(檔案描述符),然後,通過作業系統提供的介面從這個檔案物件中讀取資料(讀檔案),或者把資料寫入這個檔案物件(寫檔案)

>>> f=open("

d:\python\doit\hello.txt

","r")

>>>f.read()

'hello, world!

'>>> f.close()

(1)read()一次讀取全部檔案

read(size)一次最多讀取size個位元組長的內容

readline()每次讀取一行內容

readlines()一次讀取所有內容並返回list

(2)由於讀取檔案的過程中可能會出錯,為保證無論有沒有出錯都能關閉檔案,因而引用「try......finally......」

更為方便的辦法是使用with

try

: f = open('

/path/to/file

', 'r'

)

print

(f.read())

finally

:

iff:

f.close()

#with

with open('

/path/to/file

', 'r'

) as f:

print(f.read())

(3)讀取utf-8檔案時,需要給open()函式傳入encoding引數

(4)遇到有些編碼不規範的檔案時會出現unicodedecodeerror,此時只需要給open()函式傳入error引數,直接忽略這個錯誤

寫檔案和讀檔案是一樣的,唯一區別是呼叫open()函式時,傳入識別符號'w'或者'wb'表示寫文字檔案或寫二進位制檔案

>>> f=open("

d:\python\doit\hello.txt

","w")

>>> f.write("

everything will be fine.")

24>>> f.close()

呼叫write()來寫入檔案,但是務必要呼叫f.close()來關閉檔案。當我們寫檔案時,作業系統往往不會立刻把資料寫入磁碟,而是放到記憶體快取起來,空閒的時候再慢慢寫入。只有呼叫close()方法時,作業系統才保證把沒有寫入的資料全部寫入磁碟

使用with語句確保資料被寫入

with open('

/users/michael/test.txt

', 'w'

) as f:

f.write(

'hello, world!

')

記憶體中讀寫str和bytes

要把str寫入stringio,需要先建立乙個stringio,像檔案一樣寫入即可

getvalue()方法用於獲得寫入後的str

>>> from io import

stringio

>>> f =stringio()

>>> f.write('

hello')

5>>> f.write('')

1>>> f.write('

world!')

6>>> print

(f.getvalue())

hello world!

要讀取stringio,可以用乙個str初始化stringio,像讀檔案一樣讀取

>>> from io import

stringio

>>> f = stringio("

hey,\nguy.\nare you ok?")

>>> while

true:

s =f.readline()

if s == ''

:

break

print

(s.strip())

hey,

guy.

are you ok?

建立乙個bytesio,然後寫入一些bytes

>>> from io import

bytesio

>>> f =bytesio()

>>> f.write('

中文'.encode('

utf-8'))

6>>> print

(f.getvalue())b'

\xe4\xb8\xad\xe6\x96\x87

用乙個bytes初始化bytesio,然後,像讀檔案一樣讀取

>>> from io import

bytesio

>>> f = bytesio(b'

\xe4\xb8\xad\xe6\x96\x87')

>>>f.read()b'

\xe4\xb8\xad\xe6\x96\x87

'

在python語言中,操作檔案和目錄的函式一部分放在os模組中,一部分放在os.path模組中

#

檢視當前目錄的絕對路徑:

>>> os.path.abspath('.'

)'/path/file01'#

在某個目錄下建立乙個新目錄,首先把新目錄的完整路徑表示出來:

>>> os.path.join('

/path/file01

', '

testdir')

'/path/file01/testdir'#

然後建立乙個目錄:

>>> os.mkdir('

/path/file01/testdir')

#刪掉乙個目錄:

>>> os.rmdir('

/path/file01/testdir

')

將兩個路徑合併成乙個,通過os.path.join()函式

通過os.path.split()函式,把乙個路徑拆分為兩部分,後一部分總是最後級別的目錄或檔名

把變數從記憶體中變成可儲存或傳輸的過程稱之為序列化(pickling),序列化之後,就可以把序列化後的內容寫入磁碟,或者通過網路傳輸到別的機器上

把變數內容從序列化的物件重新讀到記憶體裡稱之為反序列化(unpickling)

pickle模組來實現序列化

pickle.dumps()方法把任意物件序列化成乙個bytes,並把這個bytes寫入檔案。

pickle.dump()方法直接把物件序列化後寫入乙個file-like object

要在不同的程式語言之間傳遞物件,就必須把物件序列化為標準格式

json表示出來就是乙個字串,可以被所有語言讀取,也可以方便地儲存到磁碟或者通過網路傳輸

二十二,雜感

恩,二十二了,感覺是個turning point。二十二是中國男公民法定結婚年齡,但是因為我連女朋友都沒有,所以,這個話題暫不談論。其實剛到上海的時候,就準備把那些將要發生的辛酸點滴記錄下來,可是不知怎麼的,真正到辛酸的時候,卻不想去記憶了。那些歷程確實值得懷念,但是想起來就感覺不好,或許這就是所謂...

二十二 封裝

namespace demo7 this.age age this public int getage public void stuinfo 年齡為 方式一 public int age 方式二 private int age 字段 內部 public int age 讀取許可權 set 預設屬性...

python筆記(二十二) 隱藏爬蟲

這裡是最基本的方法 用上節課的例子 檢測head中的user agent是否和使用者直接去用瀏覽器訪問時的一樣 所以把這個資料傳進去就可以了 隱藏head head head user agent 獲得檔案 req urllib.request.request url,data,head respo...