OS(Operation System)操作系統模塊
一、OS Path模塊中的常用函數
import os
#isabs() 是否是絕對路徑 D:\...\...\...\.後綴名
r = os.path.isabs(r'D:\JY\test\Tulips.jpg')
print('--->', r)
#相對路徑 本目錄中文件夾
r = os.path.isabs('intest/Tulips.jpg')
print('--->', r)
# .. 當前文件的上一級目錄
r = os.path.isabs('../intest/Tulips.jpg') #返回當前文件test2.py文件的上一級,直到找到指定jpg文件
print('--->', r)
#獲取當前文件所在文件夾路徑 dirname——directory目錄
#獲取的是絕對路徑
path = os.path.dirname(__file__)
print(path)
#給的相對路徑,返回絕對路徑 aa.txt需要與當前文件同目錄
path = os.path.abspath('aa.txt')
print(path)
#獲取當前文件的絕對路徑
path = os.path.abspath(__file__)
print(path)
#當前文件所在工作目錄 類似於os.path.dirname(__file__)
path = os.getcwd()
print(path)
#分割獲取文件路徑及文件名 結果爲(文件目錄, 文件名)
path = r'd:\JY\workspace\PracticeProject\PythonProject\test2.py'
result = os.path.split(path)
print(result)
print(result[1]) #獲取文件名
#分割文件和擴展名 (文件, 擴展名)
result = os.path.splitext(path)
print(result)
#獲取文件的大小
size = os.path.getsize(path)
print(size) #單位是 字節
#路徑拼接,可以拼接多個
result = os.path.join(os.getcwd(), 'file', 'a1.jpg')
print(result)
總結:os.path中常用函數
dirname() 文件夾名
join() 拼接路徑
split() 分割文件路徑及文件名
splitext() 分割文件和擴展名
getsize() 獲取文件的大小
isabs() 是否是絕對路徑
isfile() 是否是文件
isdir() 是否是文件夾
二、OS模塊常用函數
import os
#返回指定目錄下所有文件及文件夾的名字
all = os.listdir(r'D:\JY\test')
print(all) #所有文件及文件夾名字保存到列表裏面
#創建文件夾
if not os.path.exists(r'D:\JY\test2'):
f = os.mkdir(r'D:\JY\test2') #文件已經存在則報錯FileExistsError
print(f)
#刪除文件夾 只能刪除空的文件夾,文件夾中有文件,則報錯OSError 目錄不是空的
f = os.rmdir(r'D:\JY\test2')
print(f)
#刪除多個目錄 要刪的目錄中如果有文件或文件夾,則會報錯OSError 目錄不是空的
os.removedirs(r'D:\JY\test2')
#刪除文件
os.remove(r'D:\JY\test2\aaa.txt')
例子:
import os
#例: 刪除test2文件夾
path = r'D:\JY\test2'
filelists = os.listdir(path)
for filename in filelists:
#文件夾中所有文件並刪除文件
path1 = os.path.join(path, filename)
os.remove(path1)
else:
#文件刪除成功,刪除文件夾
os.rmdir(path)
print("刪除成功!")
#切換目錄
f = os.chdir(r'D:\JY\test')
print(f)
path = os.getcwd() #切換後獲取工作路徑
print(path)
總結:os模塊下的方法
os.getcwd() 獲取當前工作目錄
os.listdir() 瀏覽文件夾
os.mkdir() 創建文件夾
os.rmdir() 刪除空的文件夾
os.remove() 刪除文件
os.chdir() 切換目錄
三、OS模塊文件操作
1、將原文件夾中的文件複製到指定文件夾中
import os
src_path = r'D:\JY\test'
target_path = r'D:\JY\test1'
#複製函數 將原文件夾中文件複製到指定文件夾中
def copy(src, target):
if os.path.isdir(src) and os.path.isdir(target):
filelist = os.listdir(src) #獲取文件夾中所有文件
for f in filelist:
path = os.path.join(src, f)
with open(path, 'rb') as fsteam:
container = fsteam.read()
t_file_path = os.path.join(target, f)
with open(t_file_path, 'wb') as wstream:
wstream.write(container)
else:
print("複製完畢")
copy(src_path, target_path)
2、將原文件夾中文件(包含子文件夾),複製到指定文件夾中
#複製文件夾中文件到指定文件夾
#原文件夾中有文件夾
import os
src_path = r'D:\JY\test'
target_path = r'D:\JY\test2'
print("------------------------------")
def copy(src, target):
if not os.path.isdir(target):
os.mkdir(target)
if os.path.isdir(src_path) and os.path.isdir(target):
#獲取原文件夾中文件
filelists = os.listdir(src)
if len(filelists) > 0:
#遍歷文件列表
for f in filelists:
#拼接路徑
path = os.path.join(src, f)
#判斷是文件夾還是文件
if os.path.isdir(path):
#是文件夾,遞歸調用,重新操作裏面的文件夾
#裏面的文件夾需要新建 D:\JY\test\ppp
inner_dir = os.path.join(target, f)
os.mkdir(inner_dir)
copy(path, inner_dir)
else:
#是文件,將文件直接複製
with open(path, 'rb') as fstream:
container = fstream.read()
t_file_path = os.path.join(target, f)
with open(t_file_path, 'wb') as wstream:
wstream.write(container)
else:
print("複製完成")
copy(src_path, target_path)
四、文件及OS模塊總結
文件操作
open(path, mode)
path, filename
path: 絕對路徑 D:\JY\...
相對路徑 相對當前文件的路徑,返回上層目錄: ../
mode
讀: rb
寫: wb
stream = open(filepath, mode)
stream.read()
stream.write()
stream.close()
with open(filepath, mode) as stream:
文件操作代碼
os模塊(operation system 操作系統模塊)
os.path 常用函數:
dirname() 獲取指定文件的目錄
join() 拼接獲取新的目錄
split() 分割爲目錄和文件名
splitext() 分割爲文件和擴展名
getsize() 獲取文件大小
isabs() 是否是絕對路徑
isfile() 是否是文件
isdir() 是否是文件夾
os常用函數:
os.getcwd() 獲取當前工作目錄
os.listdir() 瀏覽文件夾
os.mkdir() 創建文件夾
os.rmdir() 刪除空的文件夾
os.remove() 刪除文件
os.chdir() 切換目錄
五、數據持久化保存
列表list 元組tuple 字典dictionary ——>內存
例:圖書館系統,用戶註冊、用戶登錄、查看圖書館中圖書數據
#用戶註冊
def register():
username = input("請輸入用戶名:")
password = input("請輸入密碼:")
repassword = input("請輸入確認密碼:")
if password == repassword:
#保存信息
#a 追加內容
with open(r'D:\JY\test\user_info.txt', 'a') as wstream:
wstream.write('{} {}\n'.format(username, password))
print('用戶註冊成功!')
else:
print('密碼不一致!')
#用戶登錄
def login():
username = input("請輸入用戶名:")
password = input("請輸入密碼:")
if username and password:
with open(r'D:\JY\test\user_info.txt', 'rb') as fstream:
while True:
user = fstream.readline()
if not user:
print("用戶名或密碼錯誤!")
break
input_user = '{} {}'.format(username, password)
if user == input_user:
print("用戶登錄成功!")
break
#讀取圖書信息
def show_books():
print("----------圖書館裏面的圖書有:-----------")
with open(r'D:\JY\test\book_info.txt', 'rb') as fstream:
books = fstream.readlines()
for book in books:
print(book, end='')