檔案與IO 一

2021-08-28 15:27:28 字數 4946 閱讀 5034

所有程式都要處理輸入和輸出,處理不同型別的檔案,包括文字和二

進製檔案,檔案編碼和其他相關的內容。對檔名和目錄的操作也會涉及到。

#!usr/bin/python3

# read the entire file as a single string

with

open

('somefile.txt'

,'rt'

)as f:

data = f.read(

)print

('*'*50

)# iterate over the lines of the file

with

open

('somefile.txt'

,'rt'

)as f:

print

(type

(f))

forfile

in f:

print

(file

)

import re

defcount_lines1()

:# print the lines of file

with

open

('somefile.txt'

,'rt'

)as f:

data = f.read(

) lst = data.split(

'\n'

)return

len(lst)

defcount_lines2()

:with

open

('somefile.txt'

,'rt'

)as f:

data = f.read(

)# lst = re.findall(r'[\w]*', data)

lst = re.split(r'[\n]'

, data)

return

len(lst)

defwt1()

:# write chunks of text data

with

open

('somefile.txt'

,'wt'

)as f:

f.write(text0 +

'\n'

) f.write(text1 +

'\n'

) f.write(text2 +

'\n'

) f.write(text3 +

'\n'

) f.write(text4 +

'\n'

)def

wt2():

# redirected print statement

with

open

('somefile.txt'

,'wt'

)as f:

print

(text0,

file

=f)print

(text1,

file

=f)print

(text2,

file

=f)print

(text3,

file

=f)print

(text4,

file

=f)def

read_various

(filename)

:'handle various data type'

# 檔案的讀寫操作預設使用系統編碼,可以通過呼叫 sys.getdefaultencoding() 來得到

# 幾個常見的編碼是 ascii, latin-1, utf-8 和 utf-16。

# 在 web 應用程式中通常都使用的是 utf-8。

# 當讀取乙個未知編碼的文字時使用 latin-1 編碼永遠不會產生解碼錯誤

new_f =

open

('new_test.txt'

,'wt'

, encoding=

'latin-1'

)with

open

(filename,

'rt'

, encoding=

'latin-1'

)as f:

for i, line in

enumerate

(f,1):

# 就算讀出來亂碼,寫進入依然完整

print

(i, line)

new_f.write(line)

if __name__ ==

'__main__'

: text0 =

'卞之琳'

text1 =

'你在視窗看風景'

text2 =

'我在橋上看你'

text3 =

'明月裝飾了你的窗子'

text4 =

'你裝飾了別人的夢'

# wt2()

# print(count_lines2())

read_various(

'somefile.txt'

)

'''在 unix 和 windows 中是不一樣的 (分別

是 \n 和 \r\n )。預設情況下,python 會以統一模式處理換行符。這種模式下,在讀

取文字的時候,python 可以識別所有的普通換行符並將其轉換為單個 \n 字元。類似

的,在輸出時會將換行符 \n 轉換為系統預設的換行符。:'''

# 如果你不希望這種預設的處理方式,可以給 open() 函式傳入引數 newline='' ,就像下面這樣

defread_no_newline

(filename)

:# read with disable newline translation

with

open

(filename,

'rt'

, newline='')

as f:

data = f.read(

)print

(data)

# 讀取乙個win上的檔案,content is "hello world!\r\n"

defread_win

(filename)

:# newline translation enabled (the default)

with

open

(filename,

'rt'

)as f:

print

(f.read())

# newline translation disable

with

open

(filename,

'rt'

, newline='')

as g:

print

(g.read())

''' 通過:set encoding檢視編碼encoding=euc-cn

這個通過命令列比較好觀察

>>> file = 'hello.txt'

>>> f = open(file, 'rt')

>>> f.read()

'hello world!\n'

>>> f.close()

>>> g = open(file, 'rt', newline='')

>>> g.read()

'hello world!\r\n'

>>>

'''# 編碼或解碼錯誤

defproduce_error

(filename)

: f =

open

(filename,

'rt'

, encoding=

'ascii'

)print

(f.read())

f.close(

)def

handle_error

(filename)

:# replace bad chars with unicode u+fffd replacement char

f =open

(filename,

'rt'

, encoding=

'ascii'

, errors=

'replace'

)print

(f.read())

f.close(

)print

('*'

*100

)# ignore bad chars entirely

g =open

(filename,

'rt'

, encoding=

'ascii'

, errors=

'ignore'

)print

(g.read())

g.close(

)print

('*'

*100

) b =

open

(filename,

'rt'

, encoding=

'latin-1'

)print

(b.read())

b.close(

)if __name__ ==

'__main__'

:'''對

於文字處理的首要原則是確保你總是使用的是正確編碼。當模稜兩可的時候,就使用默

認的設定 (通常都是 utf-8)。'''

read_win(

'hello.txt'

)# produce_error('sample')

# handle_error('sample')

pass

檔案與流I O

檔案的概念很簡單,就是資料的集合,一般儲存在磁碟或其他儲存介質上。流的概念顧名思義 從資料池或儲存裝置而來的流動或連續過程,可以在流的當前位置進行讀寫,或從流中的某一點跳到另一點。c 的檔案操作一般依靠以下幾個類 file,fileinfo,directory。流操作一般有 filestream,m...

檔案標準標準IO與檔案IO 的區別

首先宣告,我是乙個菜鳥。一下文章中出現技術誤導情況蓋不負責 先來了解下什麼是標準 以及檔案 標準 標準i o是ansi c建立的乙個標準i o模型,是乙個標準函式包和stdio.h標頭檔案中的定義,擁有必定的可移植性。標準io庫處理很多細節。例如快取分配,以優化長度執行io等。標準的io供給了三種型...

標準IO與檔案IO 的區別

先來了解下什麼是標準 以及檔案 標準 標準i o是ansi c建立的乙個標準i o模型,是乙個標準函式包和stdio.h標頭檔案中的定義,具有一定的可移植性。標準io庫處理很多細節。例如快取分配,以優化長度執行io等。標準的io提供了三種型別的快取。1 全快取 當填滿標準io快取後才進行實際的io操...