python文件及目錄操作
讀/寫文件
新建/打開文件 寫入
#舉個例子,打開D:\test\data.txt
#以寫入模式打開文件
#如果test(上級目錄)不存在則報錯
#如果data.txt(文件)不存在則創建
fd = open('filename','w')
#如果文件里面已經有內容,那么內容會被清空
fd.write('stirng')
fd.close()
打開文件 讀入
#舉個例子,打開D:\test\data.txt
#以讀入模式打開文件
#如果test(上級目錄)不存在則報錯
#如果data.txt(文件)不存在則報錯
fd = open('filename','r')
#read不傳入參數,那么會讀取整個文件
content = fd.read()
fd.close()
注意: open第一個參數如果是字符串常量(手工輸入)的話,那么會在工作目錄中查找,但是,如果傳入的是一個字符串變量的話,該字符串需要是該文件的絕對路徑
目錄操作
新建目錄
#例子,當前工作目錄C:\test test目錄下src以及其之下的子目錄python都不存在
#dirname C:\test\src\python
makedirs(C:\test\src\python) #或者 makedirs(dirname)
#第一參數如果是字符串常量,那么會在工作目錄中創建,但是如果是一個字符串變量,那么會生成該絕對路徑(沿途不存在的路徑也會創建)
#python會把以'\'分割的最后一串字符串(python)視為目錄
#如果該目錄已存在,那么會報錯
#可提前判斷一下是否存在該目錄
os.path.exists('C:\test\src\python')
瀏覽目錄
方式1
import os
#列出指定目錄下的所有文件
#files 里面既包含文件名也包含目錄名
files_and_dirs = os.listdir(dir)
#一般來說會用一個for循環來逐個判斷
for name in files_and_dirs:
#所以需要判斷是文件還是目錄,以便執行不同的操作
#是否是目錄
#如果要遍歷該路徑下所有文件/目錄,可以使用遞歸
os.path.isdir(files_and_dirs)
是否是文件
os.path.isfile(files_and_dirs)
方式2
可以直接獲得所有信息,不需要手動判斷
for root, dirs, files in os.walk(file_dir):
print(root) #當前目錄路徑
print(dirs) #當前路徑下所有子目錄
print(files) #當前路徑下所有非目錄子文件
正則表達式
import re
這里,有關正則表達式的語法在此不多講,主要講如何在python中調用正則
明確使用正則的目的
查找字符串
#例子
source = """"""
#模式串
pat = r'!\[(.+)\]\((.+)\)'
#match只匹配source字符串開頭,如果前面部分無法匹配,那么就直接返回了
#search會匹配完整個source
mat_res = re.search(pat,source)
if mat_res:
print mat_res.group()
print mat_res.group(1)
print mat_res.group(2) #這里的group需要在pat中使用`()`捕獲,如果沒有捕獲到那么調用時會報錯
注意:
- 如果有多個group匹配到,那么只會返回最后的一個
替換字符串
方式1:直接替換,new_str與上一次匹配的結果無關
new_source = source.replace(mat_res.group(1),new_str)
方式2:利用正則特性,匹配時替換,這使得在替換的過程中可以使用上一次匹配到的結果
>>> def dashrepl(matchobj):
... if matchobj.group(0) == '-': return ' '
... else: return '-'
#如果是'-'那么就變成空格,如果是兩個'-'那么就變成一個'-'
>>> re.sub('-{1,2}', dashrepl, 'pro----gram-files')
'pro--gram files'
#當然,也支持直接替換
>>> re.sub(r'\sAND\s', ' & ', 'Baked Beans And Spam', flags=re.IGNORECASE)
'Baked Beans & Spam'