欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python中的IO流使用解讀

 更新時間:2023年08月16日 08:58:31   作者:Awen0201  
這篇文章主要介紹了python中的IO流使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

什么是IO流 

input output stream , 主要指的是計算機輸入和輸出的操作;

一般來說是內(nèi)存與磁盤之間的輸入輸 出(俠義);

IO流操作是一種持久化操作,是將數(shù)據(jù)持久化在磁盤上。

Python中操作IO流的方法

通過open全局函數(shù)( 主要作用是打開本地的文件)

open函數(shù)解析:第一個參數(shù):file  (打開的文件的文件名或者路徑)

第二個參數(shù): mode  打開的模式( 默認(rèn)的是字符輸入流(r) )                                                   

  • r:read表示輸入流
  • w:write表示輸出流
  • t:表示字符流
  • b:表示字節(jié)流
  • a:表示追加輸出                                

注意:一定要關(guān)流:f.close()               

IO流的分類

1、根據(jù)數(shù)據(jù)流動方向分類

(1)輸入流:相對于內(nèi)存而言,例如從磁盤、投影儀、網(wǎng)絡(luò)中讀取數(shù)據(jù)。

>>> f = open("aa.txt","r")
>>> f
<_io.TextIOWrapper name='aa.txt' mode='r' encoding='cp936'>
>>> f.read()
'我愛學(xué)習(xí),學(xué)習(xí)使我快樂!'
>>> f.close()

上面的代碼:mode = "r" 表示輸入流,讀取當(dāng)前路徑下名為aa.txt的文檔的內(nèi)容

(2)輸出流:相對于內(nèi)存而言,例如向磁盤、投影儀、網(wǎng)絡(luò)等顯示設(shè)備中寫入數(shù)據(jù)。

>>> f = open("aa.txt",mode="w")
>>> f
<_io.TextIOWrapper name='aa.txt' mode='w' encoding='cp936'>
>>> f.write("阿文今天很開心!OVO")
11
>>> f.close()

上面的代碼:mode = "w" 表示輸出流,將內(nèi)容保存在aa.txt的文檔之中,并且會覆蓋之前的內(nèi)容;f.write("")之后返回的是寫入字符的個數(shù)。

注意每次結(jié)束操作之后都要關(guān)流:f.close(),這樣才能寫入需要寫入的東西;也有不關(guān)流寫入內(nèi)容的方法:f.flush()。

2、根據(jù)數(shù)據(jù)類型分類

字節(jié)流:mode = “b” 表示使用字節(jié)來操作IO流(如視圖、音頻、圖片可執(zhí)行文件等);字節(jié)流操作較大數(shù)據(jù)時,不建議一次性讀取。

#讀取圖片視頻或者音頻等
def copy_file(src,dest):
	f = open(src,"rb")
	f1 = open(dest,"wb")
	f1.write(f.read())
	f.close()
	f1.close()
if __name__ == '__main__':
	copy_file("D:\\PYcharm\\哈哈\\1.jpg","C:\\Users\\QWQ\\Desktop\\1.jpg")

上面的代碼:f是輸入流,f1是輸出流,將f讀取的字節(jié)流數(shù)據(jù)寫入f1中,實現(xiàn)了將圖片1.jpg復(fù)制到桌面上的操作。

字符流:mode = “t” 表示使用字符操作IO流

#讀取文檔數(shù)據(jù)
def io_test(url1,url2):
	f1 = open(url1,"rt",encoding='UTF-8')
	f2 = open(url2,"wt",encoding='UTF-8')
	msg = f1.read()
	f2.write(msg)
	f1.close()
	f2.close()
io_test("C:\\Users\\QWQ\\Desktop\\第一天\\a.txt","C:\\Users\\QWQ\\Desktop\\第一天\\b.txt")

上面的代碼:將文檔a.txt的字符流內(nèi)容寫入文檔b.txt之中。

注意的編碼格式,如果編碼格式不一致,會報錯或者亂碼,處理數(shù)據(jù)時轉(zhuǎn)碼:encoding='UTF-8'。

注意:

(1)本質(zhì) Mode = "r" "w" ------“rt" "wt" --------- t text 字符流; b ------- binary mode, mode = "b" ------- 操作字節(jié)數(shù)據(jù)(圖片、音頻、視頻等)。

(2)字節(jié)可以操作任何數(shù)據(jù),字符只能操作字符數(shù)據(jù)。

(3)IO流一定要及時關(guān)閉,避免資源的占用以及避免出現(xiàn)異常。

(3)拷貝數(shù)據(jù)時,為了避免因為目標(biāo)文件過大而導(dǎo)致電腦死機,應(yīng)使用read參數(shù)來控制每次拷貝數(shù)據(jù)的多少,也可以使用循環(huán)來做。

(5)字節(jié)流操作大數(shù)據(jù)的時候,不建議一次性讀取;字符流,我們一般不用考慮內(nèi)存不夠用問題(如500W字約10M左右)。

(6) 出現(xiàn)名字相同的文件進(jìn)行備份的時候,會覆蓋掉原本的內(nèi)容,可使用參數(shù) a:表示追加輸出  ;這樣需要保存的數(shù)據(jù)會保存在原來數(shù)據(jù)的后面。

編寫一個程序:將某個文件備份到需要保存的路徑

from os import path
import uuid
def copy_file():
	src = input("請輸入源文件的路徑:")
	dest = input("請輸入你的保存路徑:")
	f = open(src,"rb")
	filename = src[src.rfind("\\")+1:]
	random_uuid = uuid.uuid4().hex
	filename = random_uuid + filename
	print(filename)
	f1 = open(path.join(dest,filename),"wb")
	while True:
		#以M單位進(jìn)行讀取
		data = f.read(1024*1024)
		#字符流讀到最后會返回""
		if data == b"":
			print("數(shù)據(jù)讀取完成")
			break
		else:
			f1.write(data)
	f.close()
	f1.close()
if __name__ == '__main__':
	copy_file()

對象序列化

列表、字典、集合和元組都是抽象的概念,需要把對象持久化操作,所以需要序列化;

是把對象這種抽象的概念持久化到磁盤上,換句話說就是將對象轉(zhuǎn)為字節(jié)和字符。

pickle(可以將對象轉(zhuǎn)換為字節(jié)數(shù)據(jù))

  • dumps ------ 將對象序列化為字節(jié)數(shù)據(jù)
  • loads ------ 將字節(jié)數(shù)據(jù)反序列化為對象
  • dump ------ 將對象序列化為字節(jié)數(shù)據(jù)并且保存到 file 中
  • load -------- 將 file 字節(jié)數(shù)據(jù)反序列化為對象

json(可以將對象轉(zhuǎn)換為字符數(shù)據(jù))

  • dump ------ 將對象序列化成為字符數(shù)據(jù),并且保存到file中
  • dumps ------ 將對象序列化成為字符數(shù)據(jù)
  • load ------ 將一個file對象反序列化為對象
  • loads------  將一個字符串據(jù)反序列化為對象

注意:

json這個模塊一般用來序列化字典對象,或者轉(zhuǎn)換json數(shù)據(jù),但是其他對象也是可以的

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python使用mediapiple+opencv識別視頻人臉的實現(xiàn)

    python使用mediapiple+opencv識別視頻人臉的實現(xiàn)

    本文主要介紹了python使用mediapiple+opencv識別視頻人臉,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • python圖形用戶界面tkinter之標(biāo)簽Label的使用說明

    python圖形用戶界面tkinter之標(biāo)簽Label的使用說明

    這篇文章主要介紹了python圖形用戶界面tkinter之標(biāo)簽Label的使用說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 一文掌握6種Python中常用數(shù)據(jù)庫操作及代碼

    一文掌握6種Python中常用數(shù)據(jù)庫操作及代碼

    在數(shù)據(jù)處理和管理領(lǐng)域,Python作為一種高效、易用的編程語言,擁有豐富的數(shù)據(jù)庫操作模塊,可以輕松實現(xiàn)對關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)操作,本文將介紹六種常見的Python數(shù)據(jù)庫操作模塊,需要的可以參考下
    2023-12-12
  • pytorch如何實現(xiàn)多個矩陣拼接

    pytorch如何實現(xiàn)多個矩陣拼接

    這篇文章主要介紹了pytorch如何實現(xiàn)多個矩陣拼接問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Python的類成員變量默認(rèn)初始值的坑及解決

    Python的類成員變量默認(rèn)初始值的坑及解決

    這篇文章主要介紹了Python的類成員變量默認(rèn)初始值的坑及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Python實現(xiàn)準(zhǔn)確獲取PDF文件中的標(biāo)題

    Python實現(xiàn)準(zhǔn)確獲取PDF文件中的標(biāo)題

    想要在PDF文件中,解析獲取全部的標(biāo)題,是一件比較麻煩的事情,這篇文章將介紹一種較為準(zhǔn)確的提取標(biāo)題的方式,感興趣的小伙伴可以了解一下
    2024-02-02
  • python 常用日期處理-- datetime 模塊的使用

    python 常用日期處理-- datetime 模塊的使用

    這篇文章主要介紹了python 如何對日期進(jìn)行處理,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-09-09
  • 解決python gdal投影坐標(biāo)系轉(zhuǎn)換的問題

    解決python gdal投影坐標(biāo)系轉(zhuǎn)換的問題

    今天小編就為大家分享一篇解決python gdal投影坐標(biāo)系轉(zhuǎn)換的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • Python 程序員必須掌握的日志記錄

    Python 程序員必須掌握的日志記錄

    這篇文章主要介紹了Python 日志的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-08-08
  • python?中collections的?deque使用詳解

    python?中collections的?deque使用詳解

    這篇文章主要介紹了python中collections的deque使用詳解,deque是一個雙端隊列,如果要經(jīng)常從兩端append的數(shù)據(jù),選擇這個數(shù)據(jù)結(jié)構(gòu)就比較好了,更多相關(guān)內(nèi)容,需要的小伙伴可以參考下面文章內(nèi)容
    2022-09-09

最新評論