首先介紹一下什么叫做相對路徑和絕對路徑砖瞧,我們程序狗家族想必都是懂這個(gè)的息堂,但是難免會有童鞋忘記。所以碼出來供大家快速回憶一下块促。
相對路徑
相對路徑是相對于文件當(dāng)前的工作路徑而言的
絕對路徑
絕對路徑是由文件名和它的完整路徑以及驅(qū)動器字母組成的荣堰,如果是Windows系統(tǒng),那么某一個(gè)文件的絕對路徑可能是:
c:\pythonworkspace\firstpy.py
在Unix平臺上竭翠,文件的絕對路徑可能是: /home/sherlockblaze/Documents/pythonworkspace/firstpy.py
文件類型
文件大概可以分為文本文件和二進(jìn)制文件振坚。在不同操作系統(tǒng)下,可以用文本編輯器編輯的文件斋扰,都稱為文本文件屡拨,那么其他的文件就屬于二進(jìn)制文件。而二進(jìn)制文件相比與文本文件的優(yōu)勢在于二進(jìn)制文件的處理效率更高一些褥实。
讀取文件的開始
讀取一個(gè)文件的思路永遠(yuǎn)都是相同的呀狼,第一步自然就是打開一個(gè)文件。在python中我們通過如下代碼使用open函數(shù)來打開一個(gè)文件损离。
input = open(filepath,mode)
我們的mode主要由以下幾種方式哥艇。
模式|作用
----|----
r|讀取模式
w|寫入模式
a|追加模式
rb|讀取二進(jìn)制數(shù)據(jù)模式打開文件
wb|寫入二進(jìn)制數(shù)據(jù)模式打開文件
同樣我們有兩種途徑來打開文件。
- 通過絕對路徑
input = open("/Users/sherlockblaze/Documents/pythonworkspace/Test.txt","r")
- 通過相對路徑(需要注意的是僻澎,我們通過相對路徑是可以打開當(dāng)前工作目錄下的文件的貌踏,也就是說如果我的.py文件存在 /User/sherlock/Documents 下的話,我們通過相對路徑打開的文件也同樣存在當(dāng)前路徑下)
input = open("Test.txt","r")
注意
在Windows下我們通過絕對路徑來打開文件的時(shí)候窟勃,我們需要在絕對文件名前加上一個(gè) r 前綴祖乳,來表示這個(gè)字符串是一個(gè)行字符串,這樣可以讓python解釋器將文件中的反斜線理解成字面意義上的反斜線秉氧。例如:
input = open(r"d:\pythonworkspace\Test.txt","r")
如果我們不添加 r 作為前綴眷昆,則需要用轉(zhuǎn)義字符把上面的語句修改成如下所示:
input = open("d:\\pythonworkspace\\Test.txt","r")
向文件中寫入數(shù)據(jù)
我們首先通過寫入的方式打開文件,然后通過調(diào)用write方法,向文件中寫入數(shù)據(jù)亚斋。
def main():
input = open("Test.txt","w")
input.write("SherlockBlaze")
input.write("\t is the most handsome guy!\n")
input.close()
main()
通過這種方式作媚,我們往當(dāng)前目錄下的 Test.txt 文件中寫入了 SherlockBlaze is the most handsome guy! 這句話,并且需要注意的是帅刊,我們在寫完文件后纸泡,調(diào)用close()方法關(guān)閉了文件流。
常見小特性
當(dāng)使用w模式打開一個(gè)文件時(shí)赖瞒,如果文件不存在女揭,open函數(shù)就會創(chuàng)建一個(gè)新文件,如果該文件存在栏饮,那么這個(gè)文件里的內(nèi)容會被心的內(nèi)容覆蓋田绑。當(dāng)我們用讀/寫模式打開文件的時(shí)候,文件內(nèi)部會添加一個(gè)叫做文件指針的特殊標(biāo)記抡爹,文件的讀寫操作都發(fā)生在指針當(dāng)前位置上掩驱。
判斷文件是否存在
為了避免誤操作,我們可以通過os.path模塊中的isFile函數(shù)來判斷一個(gè)文件是否存在冬竟。即:
import os.path
is os.paht.isfile("Test.txt"):
print("Test.txt exists")
else:
print("Test.txt doesn't exists")
簡單小程序
輸入文件路徑欧穴,并且從中計(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()
思路簡單敘述:首先創(chuàng)建數(shù)組,每當(dāng)讀取到一個(gè)字符泵殴,對對應(yīng)位置的數(shù)字進(jìn)行加一涮帘,最后在進(jìn)行遍歷得到輸出。
下載網(wǎng)站源代碼笑诅,然后寫入目的文件中
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)行下載并把對應(yīng)html輸入到當(dāng)前工作目錄的game2.txt文件中吆你。