python文件及目錄操作


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 = """![1573180919937](C:\\typora-user-images\\1573180919937.png)"""

#模式串
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'


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM