Python基础概念_9_输入输出
輸入輸出
10 輸入輸出
10.1 簡介
我們在程序處理時可能會遇到跟用戶進(jìn)行交互的場景。比如有一個程序是根據(jù)用戶輸入的字符來判斷他輸入的是字母還是數(shù)字,然后打印到屏幕。這時我們就要用到input、print函數(shù)來實(shí)現(xiàn)對輸入的處理。
?
其它的輸入輸出場景像我們的文件和目錄的處理,因?yàn)槲募遣僮飨到y(tǒng)里基礎(chǔ)的組成部分,所以對它的創(chuàng)建、修改、刪除是我們必備的技能。接下來我們將做詳細(xì)的介紹。
?
10.2屏幕打印輸出
這里使用print函數(shù)即可。普通方法我們直接在print里輸入要打印的內(nèi)容,如
print('Helloworld')
結(jié)果:
Hello world
當(dāng)然我們也可以通過逗號來實(shí)現(xiàn)輸出的通過空格的拼接,見下:
print('第一個字','第二個字','第三個字')
結(jié)果:
第一個字 第二個字 第三個字
10.3? 讀取鍵盤輸入
我們一般通過input函數(shù)來接收鍵盤的輸入的一行文本。
?
比如這里我們搞個回顯的程序,鍵盤里輸入什么,屏幕里就打印什么:
?
str = input('請輸入:')
這里輸入的是:我是趣味編程
?
print("你輸入的內(nèi)容是: " ,str)
結(jié)果:
你輸入的內(nèi)容是:? 我是趣味編程
10.4 處理文件
我們一般是通過python里封裝的file對象來處理文件。該對象封裝了open(打開文件)、read(讀文件)、write(寫文件)、close(關(guān)閉文件)等常用的文件操作方法。以下我們逐個介紹下這些方法。
10.4.1 打開文件
打開文件的語法一般是:
open(file,mode='r',buffering=-1,encoding=None,errors=None,newline=None,closefd=True)
?
參數(shù)解釋:
?? file_name:該參數(shù)是要訪問的文件名稱,可以是某個文件對應(yīng)的完整路徑名也可以是程序所在目錄下的文件名。比如:D:\\tmp\\xiaodao.txt或則xiaodao.txt
?? access_mode:該參數(shù)指定了打開文件的模式:只讀,寫入,追加等。但這個參數(shù)不是必須的,默認(rèn)值是只讀(r)。文件訪問模式的見本節(jié)附錄的列表。
?? buffering:該參數(shù)是指定緩存的設(shè)置方式
1)? 設(shè)置為0時不會被緩存。
2)? 設(shè)置為1,代表訪問文件時會緩存。
3)? 設(shè)置值大于1的整數(shù),則代表的是寄存區(qū)的緩沖大小。
4)? 設(shè)置為負(fù)值,則表示緩沖大小則為系統(tǒng)默認(rèn)值。
?? encoding:該參數(shù)代表字符編碼,是可選參數(shù)一般在文本模式下使用。
?? errors:該參數(shù)代表如何處理編碼錯誤。
1)? 設(shè)置為'strict',代表程序錯誤時拋出ValueError異常(這是默認(rèn)值)。
2)? 設(shè)置為'ignore',代表忽略錯誤,這樣會導(dǎo)致文件操作時數(shù)據(jù)丟失。
?
文件訪問模式列表:
?
?
| 模式 | 描述 | 備注 |
| r | 以只讀方式打開文件,文件指針指向文件開頭。 | 默認(rèn)模式 |
| rb | 以二進(jìn)制格式打開文件用于只讀。文件指針指向在文件開頭。 | 二進(jìn)制文件的默認(rèn)模式 |
| r+ | 打開一個文件用于讀寫,文件指針指向文件的開頭。 | ? |
| rb+ | 以二進(jìn)制格式打開文件用于讀寫,文件指針指向文件的開頭。 | ? |
| w | 打開文件只用于寫入,如果文件已存在則覆蓋,如果文件不存在則創(chuàng)建。 | ? |
| wb | 以二進(jìn)制格式打開文件只用于寫入,如果文件已存在則覆蓋,如果文件不存在則創(chuàng)建。 | ? |
| w+ | 打開一個文件用于讀寫。如果該文件已存在則將其覆蓋。如果該文件不存在,創(chuàng)建新文件。 | ? |
| wb+ | 以二進(jìn)制格式打開一個文件用于讀寫。如果該文件已存在則將其覆蓋。如果該文件不存在,創(chuàng)建新文件。 | ? |
| a | 以追加方式打開一個文件。如果文件已存在,則文件指針指向文件的末尾。即新的內(nèi)容會追加到之前文件之后。如果該文件不存在,則創(chuàng)建新文件后寫入。 | ? |
| ab | 以二進(jìn)制格式打開一個文件用于追加。如果文件已存在,則文件指針指向文件的末尾。即新的內(nèi)容會追加到之前文件之后。如果該文件不存在,則創(chuàng)建新文件后寫入。 | ? |
| a+ | 打開文件用于讀寫。如果該文件已存在,文件指針指向文件的末尾。即新的內(nèi)容會追加到之前文件之后。如果該文件不存在,則會創(chuàng)建新的文件用來讀寫。 | ? |
| ab+ | 以二進(jìn)制格式打開文件用于讀寫。如果該文件已存在,文件指針指向文件的末尾。即新的內(nèi)容會追加到之前文件之后。如果該文件不存在,則會創(chuàng)建新的文件用來讀寫。 | ? |
?
?
代碼示例:
?
# 打開一個文件
f =open("D:\\tmp\\xiaodao.txt ", "w")
f.write(" Python 是一個比較流行的語言。\n趣味編程是個很用心的團(tuán)隊(duì)!\n")
# 關(guān)閉打開的文件
f.close()
?
10.4.2 讀文件
讀文件即讀取文件的內(nèi)容,調(diào)用f.read(size), 這將讀取一定數(shù)目的數(shù)據(jù), 然后作為字符串或字節(jié)對象返回。這里size 指字節(jié)數(shù),是個可選的參數(shù)。 當(dāng) size 被忽略了或者為負(fù), 則代表讀取并且返回該文件的所有內(nèi)容。
?
代碼示例:
這里假設(shè)有個文件是D:\\tmp\\xiaodao.txt,文件里的內(nèi)容是:
Python 是一個比較流行的語言。
趣味編程是個優(yōu)質(zhì)的團(tuán)隊(duì)。
?
# 打開一個文件
f =open("D:\\tmp\\xiaodao.txt", "r")
str =f.read()
print(str)
# 關(guān)閉打開的文件
f.close()
執(zhí)行結(jié)果:
Python 是一個非常好的語言。
趣味編程是個優(yōu)質(zhì)的團(tuán)隊(duì)。
?
當(dāng)然你也可以通過readline函數(shù)讀取一行的方式來讀文件:
?
# 打開一個文件
f =open("D:\\tmp\\xiaodao.txt", "r")
str =f.readline()
print(str)
# 關(guān)閉打開的文件
f.close()
?
執(zhí)行結(jié)果:
Python 是一個非常好的語言。
注:這里只是讀取了第一行。如果想讀取多行可以使用readlines函數(shù)。
?
f =open("D:\\tmp\\xiaodao.txt", "r")
strs =f.readlines()
forsingle in strs:
??? if len(single) ==0:
??????? break
??? single = ''.join(single).strip('\n')???
??? print(single)
# 關(guān)閉打開的文件
f.close()執(zhí)行結(jié)果:
Python 是一個非常好的語言。
趣味編程是個優(yōu)質(zhì)的團(tuán)隊(duì)
?
注:這里對換行符 “\n”做了處理,因?yàn)槟J(rèn)“\n”會被輸出成空行。
10.4.3 寫文件
寫文件對應(yīng)write函數(shù),該函數(shù)是將字符串寫入文件中。
?
# 打開一個文件
f =open("D:\\tmp\\xiaodao.txt", "w")
num =f.write( " Python 是一個非常好的語言。\n趣味編程是個優(yōu)質(zhì)的團(tuán)隊(duì)\n" )
print(num)
# 關(guān)閉打開的文件
f.close()
?
執(zhí)行結(jié)果:
31
?
注:這里字符串
“Python 是一個非常好的語言。\n趣味編程是個優(yōu)質(zhì)的團(tuán)隊(duì)\n”會被寫入到文件中,同時輸出提供多少個字節(jié)被寫入。注意這里漢字在統(tǒng)計(jì)時算一個字節(jié)。所以是31。
10.4.4 定位文件
如果我想知道當(dāng)前文件指針相對于文件頭偏于的字符數(shù)可以通過tell函數(shù)。
如果我們想改變當(dāng)前文件指針的位置時可以通過seek函數(shù)來定位文件。該函數(shù)的語法見下:
f.seek(offset,from_what)
參數(shù)說明:
?? offset是相對于參考點(diǎn)向前移動offset個字符數(shù)。如果offset是負(fù)值,則表示向后移動offset個字符數(shù)
?
?? from_what是文件指針的參考點(diǎn)
1)? 0代表從文件開頭計(jì)算,默認(rèn)為0
2)? 1代表從當(dāng)前指針?biāo)谖恢糜?jì)算
3)? 2代表從文件末尾計(jì)算
?
注:針對文本文件,python3里只能從文件開頭遍歷。但對于二進(jìn)制文件沒有限制。
?
代碼示例:
f =open("G:\\tmp\\xiaodao.txt", "r")?
f.read()?
print(f.tell())? #54,指針在文檔的末端(統(tǒng)計(jì)從0開始,漢字占2個字符,所以是54)
f.seek(0);print(f.tell()) #0代表指針在文檔開頭?
f.seek(8,0);print(f.tell()); #指針從文檔頭向后移動到第8個字符數(shù)。注意指針是從0開始算的,所以是自然順序的底9位。
print(f.read(5))#結(jié)果是:是一個非常
f.seek(10,2);print(f.tell());#這里會報(bào)錯,具體見結(jié)果頁面。
執(zhí)行結(jié)果:
當(dāng)前文件指針位置:??? ???54
當(dāng)前文件指針位置:?????? 0
當(dāng)前文件指針位置:?????? 8
從當(dāng)前指針位置取5個字符:??????? 是一個非常
Traceback (mostrecent call last):
? File "FileOperate.py", line 26, in<module>
??? f.seek(10,2); print(f.tell());
io.UnsupportedOperation:can't do nonzero end-relative seeks
?
10.4.5 關(guān)閉文件
該操作是文件的關(guān)閉文件并釋放系統(tǒng)的資源。代碼見 9.3.3章節(jié)里的的示例。
10.4.6 重命名文件
重新命名文件。一般我們通過os模塊里的rename函數(shù)進(jìn)行設(shè)置。語法見下:
os.rename(current_file_name,new_file_name)
?
參數(shù)解釋:
?? current_file_name是當(dāng)前文件名
?? new_file_name是新的文件名
?
?
代碼示例:
importos
os.rename("G:\\tmp\\xiaodao.txt","G:\\tmp\\xiaodaobiancheng.txt")
?
執(zhí)行結(jié)果:
文件xiaodao.txt被重命名為xiaodaobiancheng.txt
10.4.7 刪除文件
刪除文件, 一般我們通過os模塊里的rename函數(shù)進(jìn)行設(shè)置。語法見下:
os.remove(file_name)
?
?
參數(shù)解釋:
?? file_name是指文件名
?
?
代碼示例:
importos
os.remove("G:\\tmp\\xiaodaobiancheng.txt")
?
執(zhí)行結(jié)果:
文件xiaodaobiancheng.txt被刪除了。
10.5 處理目錄
目錄即是文件夾是文件的容器,對目錄的處理一般我們用os模塊里的內(nèi)置方法來創(chuàng)建、重命名、刪除即可。
10.5.1 創(chuàng)建目錄
創(chuàng)建目錄即在指定目錄下創(chuàng)建個目錄,對應(yīng)方法是mkdir。
?
代碼示例:
import os
os.mkdir("D:\\tmp\\xiaodao")
?
執(zhí)行結(jié)果:
D盤的tmp下會創(chuàng)建個xiaodao的文件夾。
10.5.2 更改當(dāng)前目錄
更改當(dāng)前目錄即改變當(dāng)前的工作目錄,對應(yīng)方法是chdir。
?
代碼示例:
importos
print("當(dāng)前的工作目錄是:\t"+os.getcwd())
#更改到目錄D:\tmp\xiaodao下
os.chdir("D:\\tmp\\xiaodao\\")
print("更改當(dāng)前目錄后該目錄下的文件有:\t"+str(os.listdir()))
os.rename("FolderOperate_bak.py","FolderOperate.py")
?
執(zhí)行結(jié)果:
當(dāng)前的工作目錄是:?????? d:\tmp
更改當(dāng)前目錄后該目錄下的文件有: ['FolderOperate_bak.py']
D盤的tmp下會創(chuàng)建個xiaodao的文件夾。
?
重命名目錄即重新命名指定目錄下的目錄,對應(yīng)方法是chdir。
?
10.5.3 重命名目錄
重命名目錄是重新命名目錄的名稱,方法跟重命名文件一樣,用到os模塊里的rename方法。
?
代碼示例:
importos
os.rename("D:\\tmp\\xiaodao\\","D:\\tmp\\xiaodaobiancheng\\")
?
執(zhí)行結(jié)果:
將目錄xiaodao重命名為xiaodaobiancheng
10.5.4 遍歷目錄
遍歷目錄即通過os里內(nèi)的walk方法訪問級聯(lián)的目錄結(jié)構(gòu)。
?
代碼示例:
?
importos
importos.path
rootdir= "G:\\tmp\\xiaodao"? # 指明被遍歷的文件夾
forparent,dirnames,filenames in os.walk(rootdir): #三個參數(shù):分別返回1.父目錄 2.所有文件夾名字(不含路徑) 3.所有文件名字
??? for dirname in? dirnames:#輸出文件夾信息
??????? print ("當(dāng)前目錄是:\t" + parent)
??????? print?("子目錄有:\t" + dirname)
??? for filename in filenames:#輸出文件信息
??????? print ("文件的對應(yīng)的目錄是:\t" +parent)
??????? print ("文件名是:\t" + filename)
??????? print ("完整的文件路徑名是:\t" +os.path.join(parent,filename)) #輸出文件路徑信息
?
執(zhí)行結(jié)果:
當(dāng)前目錄是:???? G:\tmp\xiaodao
子目錄有:?????? test
文件的對應(yīng)的目錄是:???? G:\tmp\xiaodao
文件名是:??? ???FolderOperate.py
完整的文件路徑名是:???? G:\tmp\xiaodao\FolderOperate.py
文件的對應(yīng)的目錄是:???? G:\tmp\xiaodao
文件名是:?????? FolderOperate_bak.py
完整的文件路徑名是:???? G:\tmp\xiaodao\FolderOperate_bak.py
文件的對應(yīng)的目錄是:???? G:\tmp\xiaodao\test
文件名是:?????? Hello.py
完整的文件路徑名是:???? G:\tmp\xiaodao\test\Hello.py
windows命令行下執(zhí)行tree命令的效果與walk如上代碼執(zhí)行的對比:
?
D:\tmp\xiaodao>tree/f
卷 新加卷 的文件夾PATH 列表
卷序列號為621B-58A0
D:.
│? FolderOperate.py
│? FolderOperate_bak.py
│
└─test
??????? Hello.py
?
10.5.5 刪除目錄
刪除目錄將目錄刪除掉,一般我們通過調(diào)用os的rmdir和shutil的rmtree來實(shí)現(xiàn)。不過rmdir僅適合目錄為空的情況。
?
代碼示例:
importos
os.rmdir("D:\\tmp\\xiaodaobiancheng")
?
執(zhí)行結(jié)果:
Traceback (mostrecent call last):
? File "FileOperate.py", line 38, in<module>
???os.rmdir("G:\\tmp\\xiaodaobiancheng")
OSError: [WinError145] 目錄不是空的。: 'D:\\tmp\\xiaodaobiancheng'
?
這里我們可以通過rmtree來實(shí)現(xiàn)非空目錄的級聯(lián)刪除:
importshutil
shutil.rmtree('D:\\tmp\\xiaodaobiancheng')
?
執(zhí)行結(jié)果:
目錄D:\\tmp\\xiaodaobiancheng和它里面的文件均被刪除。
?
10.6 總結(jié)
通過本章的學(xué)習(xí),我們了解了Python里的輸入、輸出以及文件的常用處理方法。接下來的章節(jié)我們來學(xué)習(xí)下如何處理程序異常。
總結(jié)
以上是生活随笔為你收集整理的Python基础概念_9_输入输出的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 房贷基点是银行随意加吗 需要根据这
- 下一篇: 科创板对标是什么意思