所有程式都要處理輸入和輸出,處理不同型別的檔案,包括文字和二
進製檔案,檔案編碼和其他相關的內容。對檔名和目錄的操作也會涉及到。
#!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操...