Python學習四:文件操作

《毫無障礙學Python》鄧文淵著 學習筆記

文件操作

1. open() 函數

open() 函數打開文件
  python內建函數 可打開指定文件 用於對文件讀取、修改、添加內容
  open(filename[,mode][,encode])   使用方法如下:文件句柄 = open(‘文件路徑’, ‘模式’,編碼方式)。
  #open函數共有8個參數,其中最常用三個:filename(不可省略)、mode、encode(可省、可省 省略用默認值)

  1. filename 代表要讀寫文件名 字符串類型 默認當前程序所在目錄路徑
  2. mode 用於設置文件打開模式、字符串類型,若省略 則默認讀 mode三種取值:r(只讀,不可寫,不存報錯),w(寫,會覆蓋原文件,不存則自動創建),a(增加模式,寫則內容增加到原文件,不存自創)
  3. mode 補: r(只讀), r+(讀寫,不創建)
          w(新建只寫), w+(新建讀寫)   二者均均將之前文件內容覆蓋
           a(附加寫), a+(附加讀寫)
f = open('D:\\python_code\\a.txt','r')
f.close()
content = '''Hello
My
Name
Is
Lily
'''     # 兩個'''之間的數據保留原格式
f = open('D:\\python_code\\b.txt','w')
f.write(content)
f.close()       #close()函數關閉文件  也可with語句關閉文件 ,with語句後自動結束文件

with open('D:\\python_code\\b.txt','r') as f:
    for i in f:
        print(i,end=' ')
#將文件讀取並顯示出來
f = open('D:\\python_code\\a.txt','r')
for line in f:
    print(line,end = " ")
f.close()
        ## encode 指定文件編碼模式,一般可設cp950或UTF-8
f=open('D:\\python_code\\a.txt','r',encoding = 'UTF-8')
for line in f:
    print(line,end=" ")
f.close()

2.常見文件操作

常見文件操作 功能
close() 關閉文件,關閉後文件不可進行讀寫操作
flush() 文件關閉時將數據寫入文件,flush()方法,在可在不關閉文件的條件下,強制將緩衝區數據寫入文件,並清除緩衝區
read([size]) 讀取指定長度的字符,若未指定長度,會讀取所有字符
readable() 測試文件是否可讀
readline([size]) 讀取讀取當前指針所在行中長度爲size的字符,若省略參數,會讀取一整行,包括"\n"
readlines() 讀取所有行,返回值是一個列表
next() 移動到下一行
seek(0) 將文件移到文件最前面
tell() 返回文件當前位置
write(str) 將指定字符串寫入文件中,無返回值
writable() 測試文件是否可寫

(1)read()讀取文件從當前指針位置讀取指定長度字符,不指定長度,則讀取所有字符

f = open('a.txt','r')
str1 = f.read(7)	#讀取文件中前7個字符
print(str1)
f.close

(2)readlines()讀取文件讀取全部內容,返回值爲列表,文件每一行作爲列表的一個元素

with open('b.txt','r') as f:
    content  = f.readlines()
    print(type(content))    #顯示返回值得數據類型
    print(content)          #顯示文件內容

(3)readline([size])讀取文件讀取當前字符指針所在行中長度爲size的內容,若省略參數,則讀取一整行包括"\n"字符

f = open('b.txt','r',encoding='utf-8-sig')
print(f.readline())
print(f.readline(4))
f.close()

3.文件操作應用

文件操作實現 賬號密碼管理系統 -_-|||

##文件操作應用
def menu():         #選項菜單函數
    os.system('cls')
    print("賬號、密碼管理系統")
    print('----------------------')
    print("1.新增賬號、密碼")
    print("2.顯示賬號、密碼")
    print("3.修改密碼")
    print("4.刪除賬號、密碼")
    print("0.結束程序")
    print('----------------------')

def ReadData():     #讀文件函數,將數據轉換爲字典類型返回
    with open('d:\\python_code\\password.txt','r',encoding='utf-8-sig') as f:
        filedata = f.read()     #讀取的文件內容filedata爲str類型
        if filedata != "":
            data = ast.literal_eval(filedata) #ast.literal_eval將filedata轉化爲dict(字典)類型,要求filedata內容字符格式與字典格式相同,即爲{“**”:**,“**”:**}
            return data
        else: return dict()
    
def disp_data():        #顯示賬號、密碼函數
    print("賬號\t密碼")
    print('====================')
    for key in data:
        print("{}\t{}".format(key,data[key])) 
    input("按任意鍵返回主菜單")

def input_data():       #新增賬號密碼函數
    while True:
        name = input("請輸入賬號(Enter==>停止輸入)")
        if name == "":break
        if name in data:
            print("{}賬號已存在!".format(name))
            continue
        password = input("請輸入密碼:")
        data[name] = password
        with open('d:\\python_code\\password.txt','w',encoding='utf-8-sig') as f:
            f.write(str(data))  
        print("{}已保存完畢".format(name))

def edit_data():        #修改密碼函數
    while True:
        name = input("請輸入要修改的賬號(按Enter==>停止輸入)")
        if name == "":break
        if not name in data:
            print("{}賬號不存在".format(name))
            continue
        print("原密碼爲{}".format(data[name]))
        password = input("請輸入新密碼:")
        data[name] = password
        with open('d:\\python_code\\password.txt','w',encoding='utf-8-sig') as f:
            f.write(str(data))
            input("密碼修改完畢,請按任意鍵返回主菜單")
            break

def delete_data():      #刪除賬戶函數
    while True:
        name = input("請輸入要刪除的賬號(Enter==>停止輸入)")
        if name == "":break
        if 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('d:\\python_code\\password.txt','w',encoding='utf-8-sig') as f:
                f.write(str(data))
                input("{}數據已被刪除!".format(name))
                break
            

##############主程序##############
import os,ast
data = dict()

data = ReadData()   #讀取文件後,轉換爲字典類型
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("程序執行完畢!")

運行結果:
在這裏插入圖片描述

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