Python OS及Shutil檔案處理使用筆記

OS系統操作

os.system()    #括號中加入CMD指令,即可用Python執行(例如:os.system(ls))
os.walk() #遍歷資料夾或路徑
os.path() #主要用於獲取資料夾or檔案屬性或資訊
os.environ.get('PATH') #取得環境變數內容
os.path.expanduser('~') #取得家目錄路徑
更多詳細操作請參考Python OS 文件/目录方法

匯入os

import os
import shutil

1.更改文件檔名 os.rename

os.rename(“list.txt”,”123.txt”)
os.rename(原檔名,新檔名)

1.1批量修改檔名

def batch_rename(path, prefix):     
# 函數功能: 在指定path路徑下,將該層檔案及資料夾名稱前加上prefix字串
for fname in os.listdir(path):
new_fname = prefix+fname
os.rename(os.path.join(path, fname), os.path.join(path, new_fname))

1.2遞迴顯示檔名

def find_dir(path):
# 函數功能: 遞迴顯示指定路徑下的所有檔案及資料夾名稱
for fd in os.listdir(path):
full_path=os.path.join(path,fd)
if os.path.isdir(full_path):
print('資料夾:',full_path)
find_dir(full_path)
else:
print('檔案:',full_path)

2.刪除檔案 os.remove

os.remove(“list.txt”)

3.建立資料夾 os.mkdir

os.mkdir(“資料夾名稱”)#檢查目錄是否存在,若無,則建立資料夾import os
dir='myDir'
if not os.path.exists(dir):
os.mkdir(dir)
else:
print(dir + '已經建立!')

3.1建立多層資料夾os.mkdirs()

os.makedirs("./music/subdir") 
os.makedirs("./music/a/b")
os.makedirs("./music/a/b", exist_ok =True)

4.獲取當前目錄 os.getcwd()

os.getcwd()

5.返回上層目錄 os.chdir(“../”)

os.chdir(“../”)

6.獲取目錄列表 os.listdir(“./”)

os.listdir(“./”)

7.刪除資料夾 os.rmdir( )

os.rmdir(“資料夾名稱")

8.批量修改檔名

import osfile_name = “txt文件”file_names = os.listdir(file_name)os.chdir(file_name)for name in file_names :os.rename(name,"要添加的文字"+ name)

9.遞迴列出所有資料夾與檔案

import os
path='f:\\python'
def find_dir(dir):
fds=os.listdir(dir)
for fd in fds:
full_path=os.path.join(dir,fd)
if os.path.isdir(full_path):
print('資料夾:',full_path)
find_dir(full_path)
else:
print('檔案:',full_path)
find_dir(path)

10.列出指定結尾檔案

import os
path='f:\\python'
for root,dirs,files in os.walk(path):
for file in files:
if file.endswith('.py'): #py為結尾
print(os.path.join(root,file))

11.執行作業系統命令

import os
cur_path=os.path.dirname(__file__) #取得目前路徑
os.system('cls') #清除螢幕
os.system('mkdir dir2') #建立dir2目錄
os.system('copy ossystem.py dir2\copyfile.py') #複製檔案
file=cur_path +'\dir2\copyfile.py)
os.system('notepad' + file) #以記事本開啟copyfile.py檔案

11.使用os.walk列出所有JPG與PNG檔案

import fnmatch, os
path='f:\\python'
exts = ['*.jpg','*.jpeg','*.png']
mathches = []
for root, dirs, files in os.walk(path):
for ext in exts:
for file in fnmatch.filter(files,ext):
matches.append(os.path.join(root, file))
for image in matches:
print(image)

12.找出高頻率出現單字

from collections import Counter
import re
fin=open('zen.txt','rt')
s=fin.read().lower()
words=re.findall(r'[\w\']+',s)
c=Counter(words)
print(c.most_common(5))

File檔案

開檔案

f = open(file,mode,encoding='utf-8')
#file:路徑
#mode:'r','w','a'
#r:讀取模式(預設)
#w:寫入模式(清除原本內容)
#a:附加模式(附加在檔尾)
方法
f.close() #執行完後關檔
f.read() #讀取所有字元
免用close()方法的讀檔方式
with open (....) as f:
....
程式區塊
....

檢查網頁是否更新

import hashlib,os,requestsurl = "http://opendata.epa.gov.tw/ws/Data/REWXQA/?\
$orderby=SiteName&$skip=0&$top=1000&format=json"
# 讀取網頁原始碼
html=requests.get(url).text.encode('utf-8-sig')
# 判斷網頁是否更新
md5 = hashlib.md5(html).hexdigest()
if os.path.exists('old_md5.txt'):
with open('old_md5.txt', 'r') as f:
old_md5 = f.read()
with open('old_md5.txt', 'w') as f:
f.write(md5)
else:
with open('old_md5.txt', 'w') as f:
f.write(md5)
if md5 != old_md5:
print('資料已更新...')
else:
print('資料未更新,從資料庫讀取...')

shutil操作

1.複製資料夾內的所有檔案至另一資料夾

#資料夾A底下的所有檔案複製到資料夾B,若資料夾存在會出現錯誤shutil.copytree('./music', './new_dir')

2.刪除資料夾底下所有檔案

shutil.rmtree('./music')

3.同資料夾下複製檔案

shutil.copyfile("old.txt", "new.txt")

4.移動目錄或檔案

shutil.move("1.txt", "./a") #將檔案1.txt移動至資料夾a底下 shutil.move("./1", "./a") #將資料夾1整個搬進資料夾a底下

Written by

Machine Learning / Deep Learning / Python / Flutter cakeresume.com/yanwei-liu

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store