不卡一区二区三区四区_乱中年女人伦av一区二区_美洲天堂一区二卡三卡四卡视频 _国产一区在线精品_91精品国产品国语在线不卡_99在线精品视频_99这里都是精品_国产99久久精品_99re成人在线_亚洲二区在线视频_久久先锋资源网_国产69精品久久久久毛片_亚洲一区二区三区视频在线_91小视频免费观看_欧美制服丝袜第一页_欧美日韩视频在线一区二区

您現在所在的位置:首頁 >學習資源 > Python全棧+人工智能入門教材 > Python基礎入門教程29:企業級開發進階1:文件輸入輸出流[IO操

Python基礎入門教程29:企業級開發進階1:文件輸入輸出流[IO操

來源:奇酷教育 發表于:

農歷六月初一宜聲明變量 "a ",提交代碼;忌打DOTA,提交BUG適宜方位:坐西朝東多飲水、鮮奶,女神親近指數較高進入正題本節內容如下:什么是

農歷六月初一
宜聲明變量"a",提交代碼;忌打DOTA,提交BUG
適宜方位:坐西朝東
多飲水、鮮奶,女神親近指數較高

進入正題

本節內容如下:

  • 什么是IO
  • 文件內容操作
    • 操作文本文件
    • 操作二進制文件
  • 內存IO
    • 初步認識io模塊
  • 目錄和文件的操作
    • 初步認識os模塊
    • 文件的創建、重命名、刪除
    • 目錄的創建、重命名、刪除
  • 序列化操作

1. 什么是IO

IO:Input/Output~輸入/輸出的意思
任何編程語言,核心都是對數據的處理,對數據的處理一般情況下就是指代數據的輸入和輸出
常規情況下,我們在程序運行的過程中,將數據頻繁的輸入或者輸出到計算機的內存中,讓程序正常的運行;
由于程序中的數據并不是能持久保存的,所以在一些情況下,我們將數據輸入或者輸出到計算機中的文件中來進行永久保存;
所以各種編程語言中,都提供了豐富并且完善的輸入輸出流的API接口控制數據的輸入和輸出(讀/寫)~

運行中的程序,可以將數據臨時保存在內存中【向內存中輸出數據】,也可以將內存中的數據讀取出來在程序中使用【向程序中輸入數據】

num = 12 # 將一個數據12,賦值給變量numnum和對象12被輸出保存到計算機內存中了
print (num) # 將內存中num對應的數據12讀取到程序中進行答應,num和對應的對象數據12被輸入到程序中了

內存中的數據讀取

同樣,運行中的程序,可以將數據永久保存到文件中【向文件中輸出數據】,也可以從文件中讀取數據到程序中使用【讀取文件數據輸入到程序中】


從文件中讀寫數據

2. python中的輸入/輸出

python中提供了標準的輸入/輸出的語法結構,在之前的章節中已經進行過介紹,我們這里簡單回顧一下即可
標準輸入:input()函數操作用于接收用戶數據,保存數據的過程就可以將數據寫入到內存中
標準輸出:print()函數用于將指定的數據輸出到控制臺進行展示

msg = input("請輸入個人介紹:")
print("個人介紹:" + msg)

3. python中對文件內容的操作

文件內容也是一種數據,對數據的操作一般情況下可歸結為增刪改查四種方式
對文件內容的操作,可以歸結為讀取、覆蓋、追加的操作。

python中對文件內容的操作主要是通過open()函數進行處理的,open()函數的簡單語法結構如下:

open(file, mode="r", buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

# file:是要操作的文件,這里是完整的問文件路徑+文件名稱,如:d:/test.txt

# mode:是操作默認,默認是r,表示可讀的
####  常規選項如下:
#### r     #### 表示文件以可讀的方式打開,打開的文件只能讀取文件數據,不能修改
#### w     #### 表示文件以可寫的方式打開,可以操作文件中的數據,不能做其他操作
#### x     #### 表示文件以執行的方式打開,主要用于進行文件創建等操作
#### a     #### 表示文件內容以追加的方式打開,向文件寫入數據不會覆蓋原來的數據
#### b     #### 表示文件以二進制的方式進行處理,可以操作二進制數據
#### t     #### 表示文件以文本的方式進行處理,也是默認的方式
#### +     #### 表示文件以讀寫的方式進行處理,是rw結合起來的用法
#### U     #### 表示使用通用的內容換行的方式進行處理

# buffering:表示讀寫內容的緩沖區,如果設置為0表示關閉緩沖區,通常情況下我們會使用io.DEFAULT_BUFFER_SIZE這個默認值,在不同的操作系統中是4096/8192字節的長度

# encoding:打開文件的編碼,這個選項只能用于操作文本文件的情況下,這個選項的默認值跟文件所在的操作系統有關

# errors:這個選項主要用于在encoding選項進行編碼和解碼出現錯誤時的操作,值是一個字符串,python已經封裝了字符串對應的處理功能;常規的選項如下:
#### strict    #### 使用嚴格模式進行處理,如果出現錯誤就拋出ValueError異常信息
#### ignore    #### 忽略出現的錯誤,這里需要注意,忽略編碼錯誤會導致數據丟失的!
#### replace   #### 如果出現編碼錯誤,使用特殊符號替換錯誤的編碼,如符號?

# newline:選項用于控制mode為U時自動換行的處理,可以是如下選項中的一種
#### "None""""\n""\r""\r\n"
3.1. 操作文本文件
  • 讀取文本文件中的數據,可以使用read()函數讀取所有數據或者read(size)讀取指定長度的數據或者readlines()讀取整行數據
# 以只讀的方式打開系統中d:/test.txt文本文件,讀取其中的數據
f = open("d:/test.txt", "r")

# 讀取數據到程序中
content = f.read()

# 使用讀取到的數據
print(content)

# 操作結果,記得關閉文件哦
f.close()

# 執行結果:d:/test.txt中的數據被完整的讀取出來了
~hello python!
~輸入輸出流測試數據!

上述代碼在執行時,如果操作的文件不存在就會出現如下錯誤,請按照之前的錯誤調試章節的內容分析一下錯誤

Traceback (most recent call last):
  File "D:/resp_work/PY_WORK/備課/模塊化開發/demo06/demo01文件操作.py", line 3, in <module>
    f = open("d:/testtxt", "r")
FileNotFoundError: [Errno 2] No such file or directory: 'd:/test.txt'

另外,在讀取文件數據時,一定要注意文件的編碼格式,通常情況下都是使用當前操作系統默認的編碼,也就是在函數處理時忽略encoding選項;如同下面的情況就會出現問題:

我當前系統的默認編碼是gbk編碼,在d:盤下創建了一個test2.txt文件,文件編碼修改成了utf-8編碼,此時執行如下代碼:

f = open("d:/test2.txt", "r")
content = f.read()
print(content)
f.close()

我們可以看到和前面的代碼沒有任何區別,但是執行出現如下問題:

Traceback (most recent call last):
  File "D:/resp_work/PY_WORK/備課/模塊化開發/demo06/demo01文件操作.py", line 26, in <module>
    content = f.read()
UnicodeDecodeError: 'gbk' codec can't decode byte 0xaf in position 8: illegal multibyte sequence

這是一個什么樣的問題呢:報錯提示UnicodeDecodeError也就是編碼錯誤,我們修改程序代碼

f = open("d:/test2.txt", "r", encoding="utf-8")
content = f.read()
print(content)
f.close()

重新執行程序,數據正常讀取了

?這是新的文件內容
  • 向文本文件中寫入數據,一般情況下,可以通過write()函數或者writelines()函數向文件中寫入數據
# 以可寫的方式打開d:/test.txt文件
# 這里請注意,open()函數的mode是w模式,如果目標文件不存在就會自動創建這個文件
f = open("d:/test.txt", "w")

# 通過write()函數向文件中寫入數據
f.write("這是Python從程序中寫入到文件的數據")

# 操作完成,一定記得關閉文件哦
f.close()

python程序寫入文件的數據
  • 向文本文件中追加寫入數據,上面的代碼執行的結果,會將文件中原來的數據覆蓋掉
# 以追加內容的方式打開文件
f = open("d:/test.txt", "a")

# 向文件中追加內容
f.write("這是新的內容")

# 操作完成,記得關閉文件哦
f.close()

我們打開文件可以看到,原來的數據還在,新的數據被追加到了后面


追加寫入數據
3.2. 操作二進制文件
  • 以二進制的方式打開文件讀取文件中的數據【文本文件也可以按照二進制文件的方式讀取】
# 按照二進制的方式讀取文件,mode可以設置為rb兩個選項配合
f = open("d:/test.txt", "rb")

# 讀取文件數據
content = f.read()

# 使用文件中的數據
print(content)

# 操作完畢,記得關閉文件哦
f.close()

# 執行結果如下:
~b'\xd5\xe2\xca\xc7Python\xb3\xcc\xd0\xf2\xd0\xb4\xc8\xeb\xce\xc4\xbc\xfe\xb5\xc4\xca\xfd\xbe\xdd\xd5\xe2\xca\xc7\xd0\xc2\xb5\xc4\xc4\xda\xc8\xdd'
  • 以二進制的方式,向文件中寫入數據
# 定義要寫入文件中的內容
s = "這是python按照二進制寫入的數據"

# 按照二進制的方式打開文件追加內容,mode可以設置為ab兩個選項配合
f = open("d:/test.txt", "ab")

# 向文件中寫入數據
f.write(bytes(s, encoding="utf-8"))

# 使用文件中的數據
print(content)

# 操作完畢,記得關閉文件哦
f.close()

bytes(str, encoding="")這是一個將字符串轉換成字節數組的函數,寫入完成后查看文件內容如下:


紅色部分是寫入的二進制數據

輸入輸出流擴展:當我們開始操作文件的過程中,不可避免的由于文件是否存在,文件內存是否可寫等等為讓程序出現異常情況,所以我們要對文件操作進行異常處理,常規的處理方式有兩種,如下:

  • try-except-finally處理方式
  • with語句處理方式

第一種方式:try-except-finally包含,完成文件操作過程

try:
    f = open("d:/test.txt", "+")
    f.write("寫入文件中的內容")
    f.flush()

4. python中對內存IO

python程序對數據的輸入輸出,不一定都是針對文件的,也可以是針對內存的處理
常規情況下,python提供了StringIOBytesIO兩個內置類來進行內存中數據的處理
注意:需要引入python中的io模塊

  • StringIO:在內存中讀寫字符串的內置類
  • BytesIO:在內存中讀寫二進制數據的內置類
4.1 內存中讀寫字符串
  • 內存中讀寫字符串
    常規情況下就是創建一個StringIO對象,然后按照正常的文件讀寫的方式進行內容的讀寫即可
# 引入需要的模塊
from io import StringIO

# 創建StringIO對象
s = StringIO()

# 向內存中寫入數據
s.write("保存在內存中的數據:用戶名")
s.write("內容默認是追加的")

# 從內存中讀取數據
content = s.getvalue()
print(content)

# 操作完成,適當的時刻關閉對象
s.close()
  • 內存中操作二進制數據:和StringIO基本一致
# 引入需要的模塊
from io import BytesIO

# 定義要寫入的數據,使用bytes()函數轉換成二進制數據
s = "這是要寫入的數據"
sc = bytes(s, encoding="utf-8")

# 創建BytesIO對象
b = BytesIO()

# 向內存中寫入數據
b.write(sc)

# 從內存中讀取數據
content = b.getvalue()
print(content)

# 操作完成,適當的時刻關閉對象
s.close()

# 執行結果
~b'\xe8\xbf\x99\xe6\x98\xaf\xe8\xa6\x81\xe4\xbf\x9d\xe5\xad\x98\xe7\x9a\x84\xe6\x95\xb0\xe6\x8d\xae'

5. python中對目錄/路徑/文件夾的操作

本節內容所有的操作,其實都是和計算機交互的操作~操作計算機的內存、文件等等,python程序本身是做不了這些事情的,只是python在底層進行了和操作系統交互的功能封裝,將操作系統可以執行的諸如創建文件、文件內容操作、內存操作等等封裝成了函數

簡單了解os模塊,os模塊主要是針對操作系統的API的封裝

# 引入os模塊
import os

# 查看操作系統類型
# nt表示windows操作系統;posix表示Unix/Linux或者MacOS系統
os.name
~ 執行結果:nt

# 查看操作系統中的環境變量
os.environ
~執行結果:environ({'ALLUSERSPROFILE': 'C:\\ProgramData', 'APPDATA': 'C:\\Users\\mouwe\\AppData\\Roaming',.................'CLASSPATH': 'D:\\resp_application\\Java\\jdk1.8.0_121\\lib;.;',})
5.1. 操作文件目錄
# 查看當前操作系統的絕對路徑
os.path.abspath(".")
~ 執行結果:D:\resp_work\PY_WORK\demo
# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
# 創建指定單級目錄
# 語法結構:os.mkdir(path, mode=, dir_fd=None)
# 描述:mkdir()函數用于使用指定的mode選項來創建一個文件夾目錄
# 參數path:用于創建文件夾的路徑
# 參數mode:用于設置的權限數字,默認777(所有權限:讀寫執行[rwx])
# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
# 在d盤中創建一個目錄,目錄名稱為test
os.mkdir("d:/test") 

# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
# 創建指定多級目錄
# 語法結構:os.mkdirs(path, mode=, exist_ok=False)
# 描述:makedirs()函數用于使用指定的mode選項來創建一系列文件夾目錄
# 參數path:用于創建文件夾的路徑
# 參數mode:用于設置的權限數字,默認777(所有權限:讀寫執行[rwx])
# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
# 在d盤中創建test文件夾,文件夾中包含test2文件夾,test2中包含test3文件夾
os.mkdirs("d:/test/test2/test3")

# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
# 重命名
# 語法結構:os.rename(old, new)
# 描述:rename()函數用于使用新名稱重命名文件夾或者文件
# 參數old:要重命名的文件
# 參數new:文件的新名稱
# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
os.rename("d:/test", "d:/new")

# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
# 刪除文件或者目錄
# 語法結構:os.rmdir(path)
# 描述:rmdir()函數用于刪除指定路徑的文件夾或者文件
# 參數path:要刪除的文件夾或者文件的路徑
# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
os.rm("d:/test")

# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
# 刪除多級文件夾
# 語法結構:os.removedirs(path)
# 描述:removedirs(path)
# 參數path:要刪除的多級文件夾路徑
# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
os.removedirs("d:/test/test2/test3")

# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
# 同樣在進行文件夾或者文件刪除的時候,首先要進行數據驗證
# 也就是首先判斷是文件夾/文件,才去執行刪除操作
# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
# os.path.exists(path)函數用于判斷指定的路徑是否存在,存在返回True
res = os.path.exists("d:/test")

# os.path.isdir(path)函數用于判斷指定的路徑是否文件夾,是則返回True
res = os.path.isdir("d:/test")

# os.path.isfile(path)函數用于判斷指定的路徑是否文件,是則返回True
res = os.path.isfile("d:/test")

對于文件和文件夾的初步操作,暫時先分析到這里,再后面的章節中學習過多線程等操作之后再深入分析

>>>更多VR/AR入門教程:VR入門

 

不卡一区二区三区四区_乱中年女人伦av一区二区_美洲天堂一区二卡三卡四卡视频 _国产一区在线精品_91精品国产品国语在线不卡_99在线精品视频_99这里都是精品_国产99久久精品_99re成人在线_亚洲二区在线视频_久久先锋资源网_国产69精品久久久久毛片_亚洲一区二区三区视频在线_91小视频免费观看_欧美制服丝袜第一页_欧美日韩视频在线一区二区
91在线免费看| 中文天堂在线一区| 国产成人精品网址| 亚洲国产高清国产精品| 精品一区二区日本| 国产成人av电影在线播放| 亚洲免费观看高清完整版在线 | 欧美大片国产精品| 国产91免费视频| 久久99精品久久久久久动态图| 亚洲图片你懂的| 国产99在线免费| 成a人片亚洲日本久久| 韩国av一区二区| 日韩一区在线播放| 久久这里只有精品视频网| 欧美日韩中文另类| 久久伊人资源站| 久久丁香综合五月国产三级网站| 国内精品在线播放| 91精品入口蜜桃| 欧美三级电影在线播放| 欧美中文字幕久久| 欧美肥胖老妇做爰| 日韩一区在线看| 亚洲国产精品久久人人爱| 捆绑变态av一区二区三区| 麻豆精品视频在线观看免费| 亚洲一区二区三区中文字幕| 亚洲欧美国产三级| 69av一区二区三区| 在线免费观看成人短视频| 无码免费一区二区三区免费播放| 99久久无色码| 欧美大片免费久久精品三p| 亚洲国产你懂的| 五月天激情综合网| 91在线观看网站| 欧美日韩三级一区二区| 日韩免费一区二区| 国产精品每日更新在线播放网址| 日本成人中文字幕在线视频 | 午夜精品福利视频网站| 成人午夜电影网站| 欧美日韩一区二区在线视频| 五月激情综合婷婷| 视频一区二区精品| 欧美一级精品在线| 一级做a爱片久久| 成人一区二区三区在线观看 | 国产精品狼人久久影院观看方式| 亚洲成a人v欧美综合天堂下载| 久久国产欧美日韩精品| 国产福利91精品一区| 亚洲欧美日韩国产成人综合一二三区| 一本色道**综合亚洲精品蜜桃冫| 欧美成人精品福利| 亚洲成人免费看| 在线中文字幕不卡| 性做久久久久久| 一区不卡字幕| 看电影不卡的网站| 欧美一区永久视频免费观看| 激情成人综合网| 91福利视频久久久久| 国产精品系列在线| 日本欧美一区二区在线观看| 91蜜桃传媒精品久久久一区二区| 在线精品观看国产| 国产麻豆精品一区二区| 欧美军同video69gay| 捆绑调教美女网站视频一区| 精品免费一区二区三区蜜桃| 精品久久久久久久久久久久包黑料 | 久久久久久久久蜜桃| 亚洲一区二区三区四区在线| 日韩国产在线一区| 日本va欧美va瓶| 精品视频1区2区3区| 国产一区二区在线观看视频| 欧美午夜电影一区| 一区二区免费看| 国产一级精品aaaaa看| 日韩女优av电影| 欧美三级华人主播| 高清国产一区二区三区| 国产亚洲一区二区三区四区| www.成人三级视频| 国产精品你懂的| 成人免费观看男女羞羞视频| 日韩午夜激情电影| 国产成人成网站在线播放青青| 一区二区三区日韩在线观看| 久久综合av免费| 国产亚洲污的网站| 国产伦精品一区二区三| 亚洲柠檬福利资源导航| 欧美一区二区三区四区在线观看地址 | 国产日产亚洲精品系列| 国产精品18久久久久久久久 | 成人免费高清在线| 国产精品福利一区| 欧美中文字幕一二三区视频| 成人开心网精品视频| 一区二区三区在线观看国产| 久久涩涩网站| 久久精品久久99精品久久| 亚洲欧洲综合另类在线| 国产亚洲精品7777| 日韩美女一区二区三区| 在线观看区一区二| 色屁屁一区二区| 亚洲欧洲精品一区| 欧洲成人一区二区| 日本成人黄色| 一区二区欧美日韩| 日本精品一级二级| 欧美日韩在线播放| 欧美日韩免费一区二区三区视频 | 91麻豆福利精品推荐| 婷婷激情综合网| 国产久卡久卡久卡久卡视频精品| 91在线观看免费视频| 亚洲国产欧美日韩| 欧美α欧美αv大片| 欧美日韩www| 一区二区三区在线观看欧美 | 国产一区二区在线观看免费| 国产一区二区不卡视频在线观看| 综合国产精品久久久| 欧美激情中文字幕一区二区| 久久99热狠狠色一区二区| 久久久99国产精品免费| 一本色道久久综合亚洲91| 九九在线精品视频| 日本色综合中文字幕| 91看片淫黄大片一级| 不卡日韩av| 亚洲一区二区精品在线观看| 91精品国产乱| 综合色天天鬼久久鬼色| 激情文学综合网| 国产日韩欧美一区二区三区四区| 日本高清久久一区二区三区| 欧美日产在线观看| 亚洲黄网站在线观看| 国产呦精品一区二区三区网站| 91首页免费视频| 色婷婷综合久久久| 亚洲欧洲国产日本综合| 国产精品1024久久| 一区二区视频在线免费| 久久综合99re88久久爱| 久久国产剧场电影| 午夜老司机精品| 中文字幕一区二区在线播放| 国产精品99久久久久| 日韩亚洲视频| 国产精品短视频| 成人自拍视频在线观看| 免费亚洲电影在线| 国产高清一区日本| 99久久婷婷国产精品综合| 亚洲国产一二三| 日韩欧美精品在线视频| 日韩videos| 91日韩在线专区| 日本视频在线一区| 中文字幕电影一区| 欧美精品xxxxbbbb| 日韩av图片| 91丨国产丨九色丨pron| 奇米精品一区二区三区四区| 中文字幕巨乱亚洲| 91精品一区二区三区在线观看| 日本电影一区二区三区| 99高清视频有精品视频| 另类小说一区二区三区| 亚洲欧洲精品一区二区三区| 日韩精品一区二区三区老鸭窝 | 亚洲视频精选在线| 精品99一区二区| 欧美三级在线视频| 神马影院一区二区三区| 久久综合福利| 国产精品三区www17con| 粉嫩aⅴ一区二区三区四区五区 | 99久久婷婷国产精品综合| 久草中文综合在线| 亚洲成av人**亚洲成av**| 日本一区二区视频在线观看| 日韩免费高清av| 91麻豆精品国产91久久久久久| 色吧成人激情小说| 亚洲一区二区三区涩| 色一情一乱一伦一区二区三区| 激情小说综合网| 精品国产综合| 国产日韩精品推荐| 国产免费一区二区|