python(14)OS模塊、文件及os模塊總結、持久化保存

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='')

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章