ETH官方钱包

前往
大廳
主題

AI跨領域數據科學 課程紀錄 d14 Python程式設計 (6) 檔案輸入與輸出

傳說中的巴哈魔法師~ | 2022-03-23 19:43:41 | 巴幣 0 | 人氣 307

-
python 模組


os模組
operating system

import os

os.getcwd() 取得目前的檔案 路徑資料夾(不含檔案名稱)
current working directory

os.remove(檔案(包含副檔名)與路徑) 刪除檔案

os.mkdir("資料夾名稱") 新增資料夾(目錄) (已有同名檔案無法新增)

os.rmdir("資料夾名稱") 刪除資料夾(目錄) (資料夾有內容無法刪除)

os.walk(os.getcwd()) 掃描路徑資料夾往下及本身 有的
當前路徑+該層所有資料夾+該層所有檔案 回傳tuple n*3 (可用for來接資料)
這邊我輸入目前檔案 路徑資料夾與(不含檔案名稱)

os.path.exists(檔案(包含副檔名)與路徑) 是否存在 回傳布林
os.path.abspath(檔案(包含副檔名)與路徑) 回傳 路徑資料夾與檔案名稱
os.path.basename(檔案(包含副檔名)與路徑 或 路徑) 輸入檔案回傳 (不含路徑資料夾)與檔案名稱輸入路徑回傳路徑資料夾
os.path.dirname(檔案(包含副檔名)與完整路徑) 輸入檔案回傳路徑資料夾(不含檔案名稱)
os.path.getsize(檔案(包含副檔名)與路徑) 檔案大小(位元組)
os.path.isabs(檔案(包含副檔名)與路徑 或 路徑)  是否提供完整路徑
os.path.isfile(一個東西) 是否是檔案
os.path.isdir(一個東西) 是否是資料夾
os.path.split(檔案(包含副檔名)與可以有完整路徑)  分割路徑資料夾+檔案名稱 回傳tuple 2
os.path.splitdrive(檔案(包含副檔名)與可以有完整路徑)  分割磁碟+路徑資料夾(少了磁碟)與檔案名稱 回傳tuple 2
os.path.join(一堆東西) 把所有東西包起來


system(指令) 直接執行命令提示字元CMD

os.system("cls") 淨空CMD畫面
os.system("mkdir 資料夾名稱") 新增資料夾(目錄)
os.system("copy 要複製的檔案名稱 自訂路徑\複製後的名稱(可以不用副檔名,預設與原檔案相同)") 複製指定檔案到指定位置並命名


shutil模組

import shutil

shutil.copy(要複製的檔案名稱 , 複製後的名稱)
shutil.copytree(要複製的目錄名稱(包含內容檔案一起複製) , 複製目的目錄名稱)
shutil.rmtree(要刪除的目錄(包含內容檔案一起刪除))
shutil.move(移動前 目錄 或 檔案 位置 , 移動後 目錄 或 檔案 位置)


glob模組

import glob

glob.glob(檔案名稱)
可使用萬用字元*
glob.glob("my*.*") 找預設資料夾中所有my開頭(而非作為副檔名) 的檔案
glob.glob("*.ipynb") 找預設資料夾中所有副檔名為ipynb的檔案
回傳是符合條件的所有檔案名稱 tuple n


ast模組

import ast

"字典格式的"文字 轉 字典
ast.literal_eval(檔案的內文) 回傳字典(檔案內文需要字典格式)(用來接收的東西需要先定義為字典格式)


檔案處理

傳統寫法 需要close cf.with寫法

示範'''跨行字串'''
content = '''Hello Python
中文字側式
Welcome
'''

變數名稱=open(檔案名稱,'w',newline="") 讀檔到變數
w 之後會更動檔案內容
r 之後只讀取
a 之後會再末端增加內容

變數名稱.write(字串) 寫字串到檔案 (檔案會只有該字串)
變數名稱.close() 關閉檔案 釋放記憶體

變數名稱.flush() 強制將資料立刻寫入檔案 清空緩衝區(同close釋放記憶體?)
變數名稱.read([size]) 讀取size長度的字元 size沒設定 預設讀取所有字元 (包含換行符號\n嗎??)
變數名稱.readable() 是否可讀取 回傳布林值
變數名稱.readline([size]) 讀取目前指標所在行中size長度的文字 size沒設定 預設讀取一整行 (包含換行符號\n)
變數名稱.readlines() 讀取所有行 (包含換行符號\n) 回傳list
變數名稱.next() 移動到下一行
變數名稱.seek(0) 將指標移至文件最前端
變數名稱.tell() 回傳目前檔案位置
變數名稱.writable() 是否可以寫入 回傳布林值 沒e


錯誤處理
示範:
def div(x,y):
    try:
        return x/y
    except ZeroDivisionError:
        print("除數不可為0")
    except TypeError:
        print("必須是變數形式")
try:
    print(div(A,'1'))
except NameError:
    print("使用變數必須有值")


實作帳號檔案管理:
def menu():
    os.system("cls")
    print("帳號、密碼管理系統")
    print("-"*20)
    print("1. 新增帳號、密碼\n2. 顯示帳號、密碼\n3. 修  改  密  碼\n4. 刪除帳號、密碼\n0. 結  束  程  式")
    print("-"*20)

def read_data():
    if os.path.exists('password.txt'):
        with open('password.txt','r',encoding='UTF-8-sig')as f:
            filedata=f.read()
            if filedata !="":
                data=ast.literal_eval(filedata)
                return data
            else:
                return dict()
    else:
        open('password.txt','a+')
        return read_data()

def input_data():#A
    while True:
        name= input("請輸入帳號(Enter==>停止輸入)")
        if name=="": break
        elif name in data:
            print("{}帳號已存在".format(name))
            continue
        password=input("請輸入密碼:")
        data[name]=password
        with open("password.txt",'w',encoding='UTF-8-sig')as f:
            f.write(str(data))
        print("{}已被儲存完畢".format(name))

def disp_data():#R
    print("帳號\t密碼")
    print("="*20)
    for key in data:
        print("{}\t{}".format(key,data[key]))
    input("按任意鍵返回主選單")

def edit_data():#W
    while True:
        name= input("請輸入要修改的帳號(Enter==>停止輸入)")
        if name=="": break
        elif not name in data:
            print("{}帳號不存在".format(name))
            continue
        print("原來密碼為:{}".format(name))
        password=input("請輸入密碼:")
        data[name]=password
        with open("password.txt",'w',encoding='UTF-8-sig')as f:
            f.write(str(data))
            print("密碼更改完畢,請按任意鍵返回主選單".format(name))
            break

def delete_data():#W
    while True:
        name= input("請輸入要刪除的帳號(Enter==>停止輸入)")
        if name=="": break
        elif not name in data:
            print("{}帳號不存在".format(name))
            continue
        print("確認刪除{}的資料".format(name))
        yn=input("(Y/N)?")
        if(yn=="Y" or yn=="y"):
            del data[name]
            with open("password.txt",'w',encoding='UTF-8-sig')as f:
                f.write(str(data))
                print("已刪除完畢完畢,請按任意鍵返回主選單".format(name))
                break

import os,ast
data=dict()
data=read_data()

while True:
    menu()
    choice=int(input("請輸入您的選擇:"))
    print()
    if choice==1:
        input_data()
    elif choice==2:
        disp_data()
    elif choice==3:
        edit_data()
    elif choice==4:
        delete_data()
    else:
        break
    print("-"*20)
print("程式執行完畢!")


---
jupyter notebook 其他語言


Markdown

A鍵 上方新增cell
B鍵 下方新增cell
DD鍵 刪除cell

選取 tab 縮排
選取 shift+tab 反縮排


#+空格+標題
###+空格+標題
越多井字號標題越小

---
三個減號以上 分隔線

*內文*
前後一個星號 斜體

**內文**
前後兩個星號 粗體

***內文***
前後三個星號 粗斜體

```
內文
```
強迫格式化

空四格
縮排

-+空格+標題
++空格+標題
減號或加號 製作無邊號清單

數字+.+空格+標題
數字加點 製作編號清單 (數字順序自動排序)

先清單才調整大小#


圖片可以直接複製貼上


Latex

$內文$
前後一個錢號 數學公式

$$內文$$
前後兩個錢號 單行置中數學公式


-

所以目錄到底是用 / 還是 \ 還是 // 還是 \\
= =

創作回應

相關創作

更多創作