Python3中簡(jiǎn)單的文件操作及兩個(gè)簡(jiǎn)單小實(shí)例分享
前言
首先介紹一下什么叫做相對(duì)路徑和絕對(duì)路徑,我們程序狗家族想必都是懂這個(gè)的,但是難免會(huì)有童鞋忘記。所以碼出來(lái)供大家快速回憶一下。
相對(duì)路徑
相對(duì)路徑是相對(duì)于文件當(dāng)前的工作路徑而言的
絕對(duì)路徑
絕對(duì)路徑是由文件名和它的完整路徑以及驅(qū)動(dòng)器字母組成的,如果是Windows系統(tǒng),那么某一個(gè)文件的絕對(duì)路徑可能是:
c:\pythonworkspace\firstpy.py
在Unix平臺(tái)上,文件的絕對(duì)路徑可能是: /home/sherlockblaze/Documents/pythonworkspace/firstpy.py
文件類型
文件大概可以分為文本文件和二進(jìn)制文件。在不同操作系統(tǒng)下,可以用文本編輯器編輯的文件,都稱為文本文件,那么其他的文件就屬于二進(jìn)制文件。而二進(jìn)制文件相比與文本文件的優(yōu)勢(shì)在于二進(jìn)制文件的處理效率更高一些。
讀取文件的開(kāi)始
讀取一個(gè)文件的思路永遠(yuǎn)都是相同的,第一步自然就是打開(kāi)一個(gè)文件。在python中我們通過(guò)如下代碼使用open函數(shù)來(lái)打開(kāi)一個(gè)文件。
input = open(filepath,mode)
我們的mode主要由以下幾種方式。
| 模式 | 作用 |
|---|---|
| r | 讀取模式 |
| w | 寫(xiě)入模式 |
| a | 追加模式 |
| rb | 讀取二進(jìn)制數(shù)據(jù)模式打開(kāi)文件 |
| wb | 寫(xiě)入二進(jìn)制數(shù)據(jù)模式打開(kāi)文件 |
同樣我們有兩種途徑來(lái)打開(kāi)文件。
通過(guò)絕對(duì)路徑
input = open("/Users/sherlockblaze/Documents/pythonworkspace/Test.txt","r")
通過(guò)相對(duì)路徑(需要注意的是,我們通過(guò)相對(duì)路徑是可以打開(kāi)當(dāng)前工作目錄下的文件的,也就是說(shuō)如果我的.py文件存在 /User/sherlock/Documents 下的話,我們通過(guò)相對(duì)路徑打開(kāi)的文件也同樣存在當(dāng)前路徑下)
input = open("Test.txt","r")
注意
在Windows下我們通過(guò)絕對(duì)路徑來(lái)打開(kāi)文件的時(shí)候,我們需要在絕對(duì)文件名前加上一個(gè) r 前綴,來(lái)表示這個(gè)字符串是一個(gè)行字符串,這樣可以讓python解釋器將文件中的反斜線理解成字面意義上的反斜線。例如:
input = open(r"d:\pythonworkspace\Test.txt","r")
如果我們不添加 r 作為前綴,則需要用轉(zhuǎn)義字符把上面的語(yǔ)句修改成如下所示:
input = open("d:\\pythonworkspace\\Test.txt","r")
向文件中寫(xiě)入數(shù)據(jù)
我們首先通過(guò)寫(xiě)入的方式打開(kāi)文件,然后通過(guò)調(diào)用write方法,向文件中寫(xiě)入數(shù)據(jù)。
def main():
input = open("Test.txt","w")
input.write("SherlockBlaze")
input.write("\t is the most handsome guy!\n")
input.close()
main()
通過(guò)這種方式,我們往當(dāng)前目錄下的 Test.txt 文件中寫(xiě)入了 SherlockBlaze is the most handsome guy! 這句話,并且需要注意的是,我們?cè)趯?xiě)完文件后,調(diào)用close()方法關(guān)閉了文件流。
常見(jiàn)小特性
當(dāng)使用w模式打開(kāi)一個(gè)文件時(shí),如果文件不存在,open函數(shù)就會(huì)創(chuàng)建一個(gè)新文件,如果該文件存在,那么這個(gè)文件里的內(nèi)容會(huì)被心的內(nèi)容覆蓋。當(dāng)我們用讀/寫(xiě)模式打開(kāi)文件的時(shí)候,文件內(nèi)部會(huì)添加一個(gè)叫做文件指針的特殊標(biāo)記,文件的讀寫(xiě)操作都發(fā)生在指針當(dāng)前位置上。
判斷文件是否存在
為了避免誤操作,我們可以通過(guò)os.path模塊中的isFile函數(shù)來(lái)判斷一個(gè)文件是否存在。即:
import os.path
is os.paht.isfile("Test.txt"):
print("Test.txt exists")
else:
print("Test.txt doesn't exists")
簡(jiǎn)單小程序
輸入文件路徑,并且從中計(jì)算各個(gè)字母出現(xiàn)的次數(shù)
def main():
filename = input("Enter a filename: ").strip()
infile = open(filename,"r")
counts = 26 * [0]
for line in infile:
countLetters(line.lower(),counts)
for i in range(len(counts)):
if counts[i] != 0:
print(chr(ord('a') + i) + "appears " + str(counts[i])
+ (" time" if counts[i] == 1 else " times"))
infile.close()
def countLetters(line,counts):
for ch in line:
if ch.isalpha():
counts[ord(ch) - ord('a')] += 1
main()
思路簡(jiǎn)單敘述:首先創(chuàng)建數(shù)組,每當(dāng)讀取到一個(gè)字符,對(duì)對(duì)應(yīng)位置的數(shù)字進(jìn)行加一,最后在進(jìn)行遍歷得到輸出。
下載網(wǎng)站源代碼,然后寫(xiě)入目的文件中
import sys
import urllib
import urllib.request
import os.path
def download(url,num_retries = 2):
print ('Downloading:',url)
try:
html = urllib.request.urlopen(url).read()
except urllib.URLError as e:
print ('Download error:',e.reason)
html = None
if num_retries > 0:
if hasattr(e,'code') and 500 <= e.code <600:
return download(url,num_retries-1)
return html
def main():
url = input("Enter a url:\n").strip()
f2 = input("Enter a target file:\n").strip()
if os.path.isfile(f2):
print(f2 + " already exists")
sys.exit()
html = download(url)
target = open(f2,"w")
content = html.decode(encoding="utf-8")
target.write(content)
target.close()
main()
比如我輸入網(wǎng)址 http://www.game2.cn/,在輸入目的文件:game2.txt。即可進(jìn)行下載并把對(duì)應(yīng)html輸入到當(dāng)前工作目錄的game2.txt文件中。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
利用Python的Flask框架來(lái)構(gòu)建一個(gè)簡(jiǎn)單的數(shù)字商品支付解決方案
這篇文章主要介紹了利用Python的Flask框架來(lái)構(gòu)建一個(gè)簡(jiǎn)單的數(shù)字商品支付解決方案,文中用極簡(jiǎn)的代碼展示了一個(gè)flask框架下的支付模版,需要的朋友可以參考下2015-03-03
在Python中Dataframe通過(guò)print輸出多行時(shí)顯示省略號(hào)的實(shí)例
今天小編就為大家分享一篇在Python中Dataframe通過(guò)print輸出多行時(shí)顯示省略號(hào)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
使用pycharm進(jìn)行繪圖,圖片無(wú)法顯示的解決
這篇文章主要介紹了使用pycharm進(jìn)行繪圖,圖片無(wú)法顯示的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
python3實(shí)現(xiàn)網(wǎng)絡(luò)爬蟲(chóng)之BeautifulSoup使用詳解
這篇文章主要介紹了python3實(shí)現(xiàn)網(wǎng)絡(luò)爬蟲(chóng)之BeautifulSoup使用詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
淺談keras中的后端backend及其相關(guān)函數(shù)(K.prod,K.cast)
這篇文章主要介紹了淺談keras中的后端backend及其相關(guān)函數(shù)(K.prod,K.cast),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06
python爬蟲(chóng)xpath模塊簡(jiǎn)介示例代碼
xpath是最常用且最便捷高效的一種解析方式,通用型強(qiáng),其不僅可以用于python語(yǔ)言中,還可以用于其他語(yǔ)言中,數(shù)據(jù)解析建議首先xpath,這篇文章主要介紹了python爬蟲(chóng)xpath模塊簡(jiǎn)介,需要的朋友可以參考下2023-02-02
python3.8動(dòng)態(tài)人臉識(shí)別的實(shí)現(xiàn)示例
這篇文章主要介紹了python3.8動(dòng)態(tài)人臉識(shí)別的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
Python網(wǎng)頁(yè)解析利器BeautifulSoup安裝使用介紹
這篇文章主要介紹了Python網(wǎng)頁(yè)解析利器BeautifulSoup安裝使用介紹,本文用一個(gè)完整示例一步一步安裝了BeautifulSoup的安裝和使用過(guò)程,需要的朋友可以參考下2015-03-03

