❶ python IO讀取文件方法求助
如果你不read就直接for i in file的話,那麼i就是文件指針,並不是file里的數據,readlines是每行的數據,返回一個列表,read()是讀取所有數據,返回一個字元串,方法不同,你對應的代碼也要改;你用readlines不能返回所有數據,應該是writefile = open('寫入文件', 'w')有問題,讀每一行的時候都會寫入文件,但是把上一個寫入的數據給覆蓋掉了,用writefile = open('寫入文件', 'w+'),在原數據後面追加寫入。
❷ python 線程 為什麼要加io
python 的GIL規定每個時刻只能有一個線程訪問python虛擬機,所以你要用python的多線程來做計算是很不合算的,但是對於IO密集型的應用,例如網路交互來說,python的多線程還是非常給力的。
如果你是一個計算密集型的任務,非要用python來並行執行的話,有以下幾個方法:
1 使用python的multiprocessing 模塊,能夠發揮多核的優勢。
2 使用ironPython,但是這個只能在windows下用
3 使用pypy,這個可以實現真正的多線程。
❸ python io. imread如何設置參數,使讀取的圖片為灰度圖
方法一:在使用OpenCV讀取圖片的同時將圖片轉換為灰度圖:
img = cv2.imread(imgfile, cv2.IMREAD_GRAYSCALE)
print("cv2.imread(imgfile, cv2.IMREAD_GRAYSCALE)結果如下:")
print('大小:{}'.format(img.shape))
print("類型:%s"%type(img))
print(img)
運行結果如下圖所示:
方法二:使用OpenCV,先讀取圖片,然後在轉換為灰度圖:
img = cv2.imread(imgfile)
#print(img.shape)
#print(img)
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #Y = 0.299R + 0.587G + 0.114B
print("cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)結果如下:")
print('大小:{}'.format(gray_img.shape))
print("類型:%s" % type(gray_img))
print(gray_img)
運行結果如下:
方法三:使用PIL庫中的Image模塊:
img = np.array(Image.open(imgfile).convert('L'), 'f') #讀取圖片,灰度化,轉換為數組,L = 0.299R + 0.587G + 0.114B。'f'為float類型
print("Image方法的結果如下:")
print('大小:{}'.format(img.shape))
print("類型:%s" % type(img))
print(img)
❹ python文件操作
我覺得要逐行的話最好這樣寫:
forlineinfo.readlines():
至於為什麼直接fo可以迭代出每行,應該是open函數返回值的內部實現和返回值類型決定的(應該在c代碼里,直接轉open定義看不見實現細節)。
❺ python中w、r表示什麼意思
文件讀寫就是一種常見的IO操作。
文件讀寫操作步驟
不同的編程語言讀寫文件的操作步驟大體都是一樣的,都分為以下幾個步驟:
1)打開文件,獲取文件描述符;
2)操作文件描述符--讀/寫;
3)關閉文件。
相關推薦:《Python教程》
文件打開模式:
r+、w+和a+都可以實現對文件的讀寫,那麼他們有什麼區別呢?
r+會覆蓋當前文件指針所在位置的字元,如原來文件內容是"Hello,World",打開文件後寫入"hi"則文件內容會變成"hillo, World"。
w+與r+的不同是,w+在打開文件時就會先將文件內容清空,不知道它有什麼用。
a+與r+的不同是,a+只能寫到文件末尾(無論當前文件指針在哪裡)。
❻ python判斷任務是CPU密集型還是IO密集型
目前已經知道,在需要並發執行任務的時候,需要使用多線程或者多進程;如果是IO密集型任務,使用多線程,如果是CPU密集型任務,使用多進程;但問題是,經常我們會遇到一種情況就是:需要被執行的任務既有IO操作,又有計算操作,那麼這種情況下,已經無法 直觀的判斷任務是IO操作的多還是計算操作的多了;
所以,在開始並發任務之前,可以先進行測試,看看是使用多線程還是多進程所用的時間少,那個少就用那個
❼ python的io模塊和os模塊有什麼區別
os: This mole provides a portable way of using operating system dependent functionality.
這個模塊提供了一種方便的使用操作系統函數的方法。
os 常用方法
os.remove() 刪除文件
os.rename() 重命名文件
os.walk() 生成目錄樹下的所有文件名
os.chdir() 改變目錄
os.mkdir/makedirs 創建目錄/多層目錄
os.rmdir/removedirs 刪除目錄/多層目錄
os.listdir() 列出指定目錄的文件
os.getcwd() 取得當前工作目錄
os.chmod() 改變目錄許可權
os.path.basename() 去掉目錄路徑,返迴文件名
os.path.dirname() 去掉文件名,返回目錄路徑
os.path.join() 將分離的各部分組合成一個路徑名
os.path.split() 返回( dirname(), basename())元組
os.path.splitext() 返回 (filename, extension) 元組
os.path.getatime\ctime\mtime 分別返回最近訪問、創建、修改時間
os.path.getsize() 返迴文件大小
os.path.exists() 是否存在
os.path.isabs() 是否為絕對路徑
os.path.isdir() 是否為目錄
os.path.isfile() 是否為文件
Python中的io模塊是用來處理各種類型的I/O操作流,主要是文件處理。主要有三種類型的I/O類型:文本I/O(Text I/O),二進制I/O(Binary I/O)和原始I/O(Raw I/O)。它們都是通用類別,每一種都有不同的後備存儲。屬於這些類別中的任何一個的具體對象稱為文件對象,其他常用的術語為流或者類文件對象。
❽ python什麼函數導致網路io
python語言IOError錯誤一般多發生在對文件操作報錯時,表示要打開的文件不存在,當然能引發IOError錯誤錯誤異常的原因也並不只有這一種情況。下面來列舉一些常會引發IOError錯誤的示例,並簡單的說下解決IOError錯誤的方法。
1、python ioerror的出現:打開一個不存在的文件,示例中有意輸入了一個不存在的文件名,並試圖打開它。程序找不到這個文件名所以引發了IOError
?
123
Traceback (most recent call last): File "<stdin>", line 1, in <mole>IOError: [Errno 2] No such file or directory: 'a.txt'
2、文件寫入時遇到python error錯誤原因?有同學遇到了IOError Errno 0 錯誤的情況,在用a+方式打開文件,之後讀取該文件內容。修改讀取的內容後重新寫入文件,在寫入時程序也遇到了IOError錯誤。這時要注意在讀取文件之後記得要把文件關閉,當你需要寫入文件時,要再將文件以w+方式打開寫入。加深學習Python open()函數文件打開、讀、寫基礎操作,可以減少類似情況發生。
3、當你不能滿足被訪問文件所設置的許可權時,也會引發IO Error錯誤,類似這樣IOError: [Errno 13] Permission denied: 'c:/a.txt' python permission denied 從字面意思來理解就可以知道原因了,是因為我們執行的命令(運行python文件等),沒有許可權,給一個超級管理員許可權就可以了。
以上是可以引發python ioerror錯誤異常最常見原因中幾種,還有很多情況報這個內建異常類名。常見的Python語言異常錯誤類型還有哪些?仔細理解錯誤提示的內容,英文不好的同學可以去翻譯一下,就能很容易的知道問題所在並解決這個問題。
❾ 0基礎學習python怎麼入門呢
該如何學習Python呢?
(1)選擇學習方向。學習Python主要目的是用語言來解決問題,而不是了解這門語言。Python應用方向有很多,Python基礎知識學習完後,應用方向不同需求也不同;雖然Python需要系統化的學習,但是在學習Python的時候,想要告訴大家還是需要提前確定一下自己感興趣的方向,有針對性的學習更為重要。
(2)規劃學習路線。當確定好自己的發展方向之後,下一步就是順著方向去學習,建立好自己的學習路線。要有系統化的學習路線,需要完成什麼樣的目標,需要學習哪些知識,需要懂哪些知識,這樣每次學習一個部分,就可以有實際的結果輸出,結果的輸出才可以鼓勵進行下一步的學習。
(3)合理規劃時間。劃好自己的學習時間,每天進度是什麼,每天學習幾個小時都是需要提前確定的,有計劃有規劃的去學習,堅持下來才會有意外的收獲。
用任何編程語言來開發程序,都是為了讓計算機工作。目前有很多種流行的編程語言,如難學的C語言,普遍的Java語言,適合初學者的Basic語言,適合網頁編程的JavaScript語言等,Python適合初學者的一種計算機程序設計語言。
❿ python怎麼打開文件模式
讀寫文件是最常見的IO操作。Python內置了讀寫文件的函數,用法和C是兼容的。
讀寫文件前,我們先必須了解一下,在磁碟上讀寫文件的功能都是由操作系統提供的,現代操作系統不允許普通的程序直接操作磁碟,所以,讀寫文件就是請求操作系統打開一個文件對象(通常稱為文件描述符),然後,通過操作系統提供的介面從這個文件對象中讀取數據(讀文件),或者把數據寫入這個文件對象(寫文件)。
讀文件
要以讀文件的模式打開一個文件對象,使用Python內置的open()函數,傳入文件名和標示符:
>>> f = open('/Users/michael/test.txt', 'r')
標示符'r'表示讀,這樣,我們就成功地打開了一個文件。
如果文件不存在,open()函數就會拋出一個IOError的錯誤,並且給出錯誤碼和詳細的信息告訴你文件不存在:
>>> f=open('/Users/michael/notfound.txt', 'r')
Traceback (most recent call last):
File "<stdin>", line 1, in <mole>
FileNotFoundError: [Errno 2] No such file or directory: '/Users/michael/notfound.txt'
如果文件打開成功,接下來,調用read()方法可以一次讀取文件的全部內容,Python把內容讀到內存,用一個str對象表示:
>>> f.read()'Hello, world!'
最後一步是調用close()方法關閉文件。文件使用完畢後必須關閉,因為文件對象會佔用操作系統的資源,並且操作系統同一時間能打開的文件數量也是有限的:
>>> f.close()
由於文件讀寫時都有可能產生IOError,一旦出錯,後面的f.close()就不會調用。所以,為了保證無論是否出錯都能正確地關閉文件,我們可以使用try ... finally來實現:
try:
f = open('/path/to/file', 'r')
print(f.read())finally: if f:
f.close()
但是每次都這么寫實在太繁瑣,所以,Python引入了with語句來自動幫我們調用close()方法:
with open('/path/to/file', 'r') as f:
print(f.read())
這和前面的try ... finally是一樣的,但是代碼更佳簡潔,並且不必調用f.close()方法。
調用read()會一次性讀取文件的全部內容,如果文件有10G,內存就爆了,所以,要保險起見,可以反復調用read(size)方法,每次最多讀取size個位元組的內容。另外,調用readline()可以每次讀取一行內容,調用readlines()一次讀取所有內容並按行返回list。因此,要根據需要決定怎麼調用。
如果文件很小,read()一次性讀取最方便;如果不能確定文件大小,反復調用read(size)比較保險;如果是配置文件,調用readlines()最方便:
for line in f.readlines():
print(line.strip()) # 把末尾的'\n'刪掉
file-like Object
像open()函數返回的這種有個read()方法的對象,在Python中統稱為file-like Object。除了file外,還可以是內存的位元組流,網路流,自定義流等等。file-like Object不要求從特定類繼承,只要寫個read()方法就行。
StringIO就是在內存中創建的file-like Object,常用作臨時緩沖。
二進制文件
前面講的默認都是讀取文本文件,並且是UTF-8編碼的文本文件。要讀取二進制文件,比如圖片、視頻等等,用'rb'模式打開文件即可:
>>> f = open('/Users/michael/test.jpg', 'rb')>>> f.read()b'\xff\xd8\xff\xe1\x00\x18Exif\x00\x00...' # 十六進製表示的位元組
字元編碼
要讀取非UTF-8編碼的文本文件,需要給open()函數傳入encoding參數,例如,讀取GBK編碼的文件:
>>> f = open('/Users/michael/gbk.txt', 'r', encoding='gbk')>>> f.read()'測試'
遇到有些編碼不規范的文件,你可能會遇到UnicodeDecodeError,因為在文本文件中可能夾雜了一些非法編碼的字元。遇到這種情況,open()函數還接收一個errors參數,表示如果遇到編碼錯誤後如何處理。最簡單的方式是直接忽略:
>>> f = open('/Users/michael/gbk.txt', 'r', encoding='gbk', errors='ignore')
寫文件
寫文件和讀文件是一樣的,唯一區別是調用open()函數時,傳入標識符'w'或者'wb'表示寫文本文件或寫二進制文件:
>>> f = open('/Users/michael/test.txt', 'w')>>> f.write('Hello, world!')>>> f.close()
你可以反復調用write()來寫入文件,但是務必要調用f.close()來關閉文件。當我們寫文件時,操作系統往往不會立刻把數據寫入磁碟,而是放到內存緩存起來,空閑的時候再慢慢寫入。只有調用close()方法時,操作系統才保證把沒有寫入的數據全部寫入磁碟。忘記調用close()的後果是數據可能只寫了一部分到磁碟,剩下的丟失了。所以,還是用with語句來得保險:
with open('/Users/michael/test.txt', 'w') as f:
f.write('Hello, world!')
要寫入特定編碼的文本文件,請給open()函數傳入encoding參數,將字元串自動轉換成指定編碼。
細心的童鞋會發現,以'w'模式寫入文件時,如果文件已存在,會直接覆蓋(相當於刪掉後新寫入一個文件)。如果我們希望追加到文件末尾怎麼辦?可以傳入'a'以追加(append)模式寫入。
所有模式的定義及含義可以參考Python的官方文檔。