前言
首先介紹一下什么叫做相對路徑和絕對路徑,我們程序狗家族想必都是懂這個的,但是難免會有童鞋忘記。所以碼出來供大家快速回憶一下。
相對路徑
相對路徑是相對于文件當前的工作路徑而言的
絕對路徑
絕對路徑是由文件名和它的完整路徑以及驅動器字母組成的,如果是Windows系統,那么某一個文件的絕對路徑可能是:
c:pythonworkspacefirstpy.py
在Unix平臺上,文件的絕對路徑可能是: /home/sherlockblaze/Documents/pythonworkspace/firstpy.py
文件類型
文件大概可以分為文本文件和二進制文件。在不同操作系統下,可以用文本編輯器編輯的文件,都稱為文本文件,那么其他的文件就屬于二進制文件。而二進制文件相比與文本文件的優勢在于二進制文件的處理效率更高一些。
讀取文件的開始
讀取一個文件的思路永遠都是相同的,第一步自然就是打開一個文件。在python中我們通過如下代碼使用open函數來打開一個文件。
input = open(filepath,mode)
我們的mode主要由以下幾種方式。
模式 | 作用 |
---|---|
r | 讀取模式 |
w | 寫入模式 |
a | 追加模式 |
rb | 讀取二進制數據模式打開文件 |
wb | 寫入二進制數據模式打開文件 |
同樣我們有兩種途徑來打開文件。
通過絕對路徑
input = open("/Users/sherlockblaze/Documents/pythonworkspace/Test.txt","r")
通過相對路徑(需要注意的是,我們通過相對路徑是可以打開當前工作目錄下的文件的,也就是說如果我的.py文件存在 /User/sherlock/Documents 下的話,我們通過相對路徑打開的文件也同樣存在當前路徑下)
input = open("Test.txt","r")
注意
在Windows下我們通過絕對路徑來打開文件的時候,我們需要在絕對文件名前加上一個 r 前綴,來表示這個字符串是一個行字符串,這樣可以讓python解釋器將文件中的反斜線理解成字面意義上的反斜線。例如:
input = open(r"d:pythonworkspaceTest.txt","r")
如果我們不添加 r 作為前綴,則需要用轉義字符把上面的語句修改成如下所示:
input = open("d:\pythonworkspace\Test.txt","r")
向文件中寫入數據
我們首先通過寫入的方式打開文件,然后通過調用write方法,向文件中寫入數據。
def main(): input = open("Test.txt","w") input.write("SherlockBlaze") input.write(" is the most handsome guy! ") input.close() main()
通過這種方式,我們往當前目錄下的 Test.txt 文件中寫入了 SherlockBlaze is the most handsome guy! 這句話,并且需要注意的是,我們在寫完文件后,調用close()
方法關閉了文件流。
常見小特性
當使用w模式打開一個文件時,如果文件不存在,open函數就會創建一個新文件,如果該文件存在,那么這個文件里的內容會被心的內容覆蓋。當我們用讀/寫模式打開文件的時候,文件內部會添加一個叫做文件指針的特殊標記,文件的讀寫操作都發生在指針當前位置上。
判斷文件是否存在
為了避免誤操作,我們可以通過os.path
模塊中的isFile函數來判斷一個文件是否存在。即:
import os.path is os.paht.isfile("Test.txt"): print("Test.txt exists") else: print("Test.txt doesn't exists")
簡單小程序
輸入文件路徑,并且從中計算各個字母出現的次數
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()
思路簡單敘述:首先創建數組,每當讀取到一個字符,對對應位置的數字進行加一,最后在進行遍歷得到輸出。
下載網站源代碼,然后寫入目的文件中
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: ").strip() f2 = input("Enter a target file: ").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()
比如我輸入網址 http://www.game2.cn/,在輸入目的文件:game2.txt。即可進行下載并把對應html輸入到當前工作目錄的game2.txt文件中。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com