《毫無障礙學Python》鄧文淵著 學習筆記
文件操作
1. open() 函數
open() 函數打開文件
python內建函數 可打開指定文件 用於對文件讀取、修改、添加內容
open(filename[,mode][,encode]) 使用方法如下:文件句柄 = open(‘文件路徑’, ‘模式’,編碼方式)。
#open函數共有8個參數,其中最常用三個:filename(不可省略)、mode、encode(可省、可省 省略用默認值)
- filename 代表要讀寫文件名 字符串類型 默認當前程序所在目錄路徑
- mode 用於設置文件打開模式、字符串類型,若省略 則默認讀 mode三種取值:r(只讀,不可寫,不存報錯),w(寫,會覆蓋原文件,不存則自動創建),a(增加模式,寫則內容增加到原文件,不存自創)
- 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("程序執行完畢!")
運行結果: