readpython
① python中isread函數么
文件對象(open() 函數的返回值)提供了read()函數可以按位元組或字元讀取文件內容,到底是讀取位元組還是字元,取決於使用 open() 函數打開文件時,是否使用了 b 模式,如果使用了 b 模式,則每次讀取一個位元組;反之,則每次讀取一個字元。
read() 函數的基本語法格式如下:
file.read([size])
其中,file 表示打開的文件對象;size 作為一個可選參數,用於指定要讀取的字元個數,如果省略,則默認一次性讀取所有內容。
【例 1】採用循環讀取整個文件的內容。
# a.txt 文件內容為:C語言中文網
f = open("a.txt", 'r', True)
while True:
# 每次讀取一個字元
ch = f.read(1)
# 如果沒有讀到數據,跳出循環
if not ch:
break
# 輸出ch
print(ch, end='')
f.close()
運行結果為:
C語言中文網
上面程序採用循環依次讀取每一個字元(因為程序沒有使用 b 模式),每讀取到一個字元,程序就輸出該字元。
正如從上面程序所看到的,當程序讀寫完文件之後,推薦立即調用 close() 方法來關閉文件,這樣可以避免資源泄露(後續章節會詳細介紹 close() 函數)。
注意,在調用 read() 函數讀取文件內容時,成功讀取的前提是在 open() 函數中使用 r 或 r+ 的模式打開文件,否則(模飢比如將上面程序中 open()的打開模式改為 w),程序會拋出io.UnsupportedOperation異常:
Traceback (most recent call last):
File "C:\Users\mengma\Desktop\demo.py", line 4, in
ch = f.read(1)
io.UnsupportedOperation: not readable
【例 2】調用 read() 方法時不傳入參數,該方法默認會讀取全部文件內容。例如:
f = open("旦激返a.txt", 'r', True)
# 直接讀取全部文件
print(f.read())
f.close()
運行結果為:
C語言中文網
read()函數拋出UnicodeDecodeError異常的解決方法
當使用 open() 函數打開文本文件時,默認會使用當前操作系統的字元集,比如 Windows 平台,open() 函數默認使用 GBK 字元集。因此,上面程序讀取的 a.txt 也必須使用 GBK 字元集保存;否則,程序就會出現UnicodeDecodeError錯誤。
如果要讀取的文件所使用的字元集和當前操作系統的字元集不匹配,則有兩種解決方式:
使用二進制模式讀取,然後用 bytes 的 decode() 方法恢復成字元串。
利用 codecs 模塊的 open() 函數來打開文件,該函數在打開文件時允許指定字元集。
例如,下面程序使用二進制模式來讀取文本文件:
# 指定使用二進制方式讀取文件內容,a.txt 以 utf-8 編碼存儲
f = open("a.txt", 'rb', True)
# 直接讀取全部文件,並調用bytes的decode將位元組內容恢復成字元串
print(f.read().decode('utf-8'))
f.close()
上面程序在調用 open() 函數時,傳入了 rb 模式,這表明採用二進制模式讀取文件,此時文件對象的 read() 方法返回的是 bytes 對象,程序可調用 bytes 對象的 decode() 方法將它恢復成字元串。由於此時讀取的 a.txt 文件是以 UTF-8 的格式保存的,因此程序需要使用 decode() 方法恢復字元串時顯鉛襪式指定使用 UTF-8 字元集。
下面程序使用 codes 模塊的 open() 函數來打開文件,此時可以顯式指定字元集:
import codecs
# 指定使用utf-8 字元集讀取文件內容
f = codecs.open("a.txt", 'r', 'utf-8', buffering=True)
while True:
# 每次讀取一個字元
ch = f.read(1)
# 如果沒有讀取到數據,則跳出循環
if not ch : break
# 輸出ch
print (ch, end='')
f.close()
上面程序在調用 open() 函數時顯式指定使用 UTF-8 字元集,這樣程序在讀取文件內容時就完全沒有問題了。
② Python中read讀不出圖像文件內容,是編碼問題嗎
print出來空行是正常的,jpg是二進制文件,不是文本文件,會有編碼問題模洞
寫二進制文件應該是wb:
f2 =open('2.jpg','wb')
你的代碼有一個非常嚴重的答蘆問題,f.read()執行了多次!
print f.read()
這里就把文件的內容全部讀取出來了清碼帶
再次執行 f.read() 得到的是將是空的
③ python對文本文件的讀有哪些方法,寫有哪些方法
1 文件讀取全文本操作
在一定場景下我們需要把文本全部內容讀取出來,進行處理。python提供三種函數讀取文件,分別是read readline readlines,
read():讀取文件的全部內容,加上參數可以指定讀取的字元。
readline():讀取文件的一行。
readlines():讀取文件的所有行到內存中。
不同場景下我們可以選擇不同函數對文件進行讀取。
1.1 方法一
file_name = input("請輸入你要打開的文件的完整路徑及名稱")
file= open(file_name, "r")
txt=file.read()
# 全文本的處理
file.close()
使用read函數將文件中的內容全部讀取,放在字元串變數txt中。這樣操作適合於文本較小,處理簡單的情況,當文件較大時,這種方式處理時不合適的。一次性讀取較大的文件到內存中,會耗費較多的時間和資源。這時候分批處理效果更好。
1.2 方法二
file_name = input("請輸入你要打開的文件的完整路徑及名稱")
file= open(file_name, "r")
txt= file.read(4)
# 文本的處理while txt != ""txt= file.read(4)
# 批量文本處理
file.close()
這種方法適合於分批處理文本信息,每次批量讀入,批量處理,不會對內存造成較大的壓力。
1.3 方法三
file_name = input("請輸入你要打開的文件的完整路徑及名稱")
file= open(file_name, "r")for line infile.readlines():
# 處理每一行數據
file.close()
這種處理方式適合處理以行為分割特點的文本,並且文本較小,因為這種處理方式需要一次性把文件所有內容讀取到內存中。
1.4 方法四
file_name = input("請輸入你要打開的文件的完整路徑及名稱")
file= open(file_name, "r") # 這里的file時文件句柄for line infile:
# 處理每一行數據
file.close()
這種方式和方法三中的區別是分行讀入,逐行處理,不會一次性把文件所有內容都讀入到內存中,對一些大文件的處理是很有效的。
2 文件寫入文本操作
文件寫入有兩種寫入函數和一種輔助支持。
write():向文件中寫入一個字元或者位元組流
writelines():將一個元素全為字元串的列表寫入到文件中 需要注意的是,writelines寫入列表元素的時候會把列表元素的內容拼接到一起寫入,不會有換行和空格 。
seek(): 輔助寫入函數offset偏移量參數代表含義如下
0 - 文件開頭
1 - 當前位置
2 - 文件結尾
2.1 方法一
file_name = input("output.txt", "w+")
text= "hello world!"file_name.write(text)
file.close()
2.2 方法二
file_name = input("output.txt", "w+")
list= ["中午","早上","晚上"]
file_name.writelines(list)for line infile:
# 讀取寫入的數據,這時候發現是沒有任何內容的
file.close()
我們增加一行代碼就可以讀取到寫入的文件內容,利用seek()函數調整寫操作指針的位置,可以實現寫操作之後的正常讀取。
file_name = input("output.txt", "w+")
list= ["中午","早上","晚上"]
file_name.readlines(list)
file_name.seek(0) # 調整寫的指針到文件的開始位置for line infile:
# 讀取寫入的數據,這時候會讀出一行寫入的數據。
file.close()
④ python3用read()函數讀取文件兩次,就變成空字元串了
python在讀取文件的時候是根據游標位置來讀取的。讀一行以後游標位置到了下一行。再來個read又到了下一行。
想要重新從頭開始讀的話用f.seek(0)
將游標位置放到最前面。這樣再f.read()就是第一行的內容
還有個方法是f.tell()
告訴你當前游標的位置。你可以把文件都讀完了以後f.tell()一下看看游標位置
然後再f.seek(0)
再f.tell()一下看看游標位置
with open() as f跟你截圖用的差不多,只不過這種方式不用f.close(),會自動關閉文件句柄。不過也可以手動關閉文件句柄
⑤ Python中read,readline和readlines三者間的區別和用法
這篇文章主要給大家介紹了關於Python中讀取文件的read()、readline()和readlines()方法三者間的區別和用法,需要的朋友可以參考下
前言
眾所周知在python中讀取文件常用的三種方法:read(),readline(),readlines(),今天看項目是又忘記他們的區別了。以前看書的時候覺得這東西很簡單,一眼掃過,待到用時卻也只知道有這么幾個方法,不懂得它的原理與用法。也許吧,沒有永遠的記憶,況且根本沒有用心去記它。話不多說,來一起看看詳細的介紹:
准備
假設a.txt的內容如下所示:
Hello
Welcome
What is the fuck...
一、read([size])方法
read([size])方法從文件當前位置起讀取size個位元組,若無參數size,則表示讀取至文件結束為止,它范圍為字元串對象
f = open("a.txt")
lines = f.read()
print lines
print(type(lines))
f.close()
輸出結果:
Hello
Welcome
What is the fuck...
<type 'str'> #字元串類型
二、readline()方法
從字面意思可以看出,該方法每次讀出一行內容,所以,讀取時佔用內存小,比較適合大文件,該方法返回一個字元串對象。
f = open("a.txt")
line = f.readline()
print(type(line))
while line:
print line,
line = f.readline()
f.close()
輸出結果:
<type 'str'>
Hello
Welcome
What is the fuck...
三、readlines()方法讀取整個文件所有行,保存在一個列表(list)變數中,每行作為一個元素,但讀取大文件會比較占內存。
f = open("a.txt")
lines = f.readlines()
print(type(lines))
for line in lines:
print line,
f.close()
輸出結果:
<type 'list'>
Hello
Welcome
What is the fuck...
四、linecache模塊
當然,有特殊需求還可以用linecache模塊,比如你要輸出某個文件的第n行:
# 輸出第2行
text = linecache.getline(『a.txt',2)
print text,
對於大文件效率還可以。
⑥ python使用read()無法讀取到文件內容,可以添加內容
你的代碼就是這樣的嗎?
要注意的是,對文件操作,寫入要打開關閉一次,讀取也要打開關閉一次。你第二次讀取並沒有打開操作,所以報錯。
解決方法,在圖片標注區域,加上 f=open(open.txt','r')就行,因為你上面寫入操作時已經關閉了,也就不存在f文件對象了,要重新再建立一個文件對象
⑦ python中read,readline和readlines的區別
read 讀取整個文件
readline 讀取下一行
readlines 讀取整個文件到一個迭代器以供遍歷(讀取到一個list中,以供使用,比較方便)
⑧ Python讀取文件內容的方法有幾種
filename=open('i:\\install\\test.txt','r+')#讀取xx路徑xx文件;r+代表的是讀寫並存方式 print filename.read()#讀取所有的文件
⑨ python中read() ,readline()以及readlines()區別
該篇文章主要是記錄python中操作文件的三個函數read(),readline()以及readlines()之間的擾或弊區別。
首先先給出結論:
1.read() 每次讀取整個文件,它通常將讀取到底文件內容放到一個字元串變數中,也就是說 .read() 生成文件內容是一個字元串類型。
2.readline()每團散只讀取文件的一行,通常也是讀取到的一行內容放到一個字元串變數中,返回str類型。
3.readlines()每次按行讀取整個文件內容,將讀取到的內容放到緩族一個列表中,返回list類型。
我的文件內容如下:
編寫程序如下:
得出結果如下:
編寫程序如下:
得出輸出結果如下:
編寫程序如下:
得到輸出結果如下:
⑩ python里open和read為什麼分別按行和位元組讀取
Python的open文件的讀取方式有以下幾種方法:
read([size]):讀取文件,如果傳了size參數,則讀取size位元組,否則讀取全部
readline([size]):讀取一行
readlines([size]):讀取完文件,返迴文件每一行所組成的列表