python 檔案操作 二

2022-09-10 09:48:22 字數 4533 閱讀 4442

目錄2. 檔案優化操作

3. 檔案操作模式

4. 練習

1.1 讀方法

with open(r'a.txt','r', encoding='utf8') as f:

print(f.read()) # 一次性讀取檔案所有的內容

print(f.readline()) # 每次值讀檔案一行內容

print(f.readlines()) # 讀取檔案所有內容,組織成列表,每個元素是檔案的每行內容

print(f.readable()) # 判斷當前檔案是否可讀,返回布林值

1.2 寫方法
with open(r'a.txt', 'w', encoding='utf8') as f:

f.write('這是寫入的內容') # 向檔案寫入內容

f.write(123) # 寫入的內容必須是字串,這句會報錯

f.writelines(['jason', 'tom', 'bob']) # 將列表中的每個字串元素寫入檔案

print(f.writable()) # 判斷忘記拿是否可寫

f.flush() # 將記憶體檔案資料刷到硬碟

with open(r'a.txt','r',encoding='utf8') as f:

print(f.read())

read() 會一次性讀取檔案內所有的內容

弊端: 1.一次性讀完內容之後,游標停留在檔案末尾,無法再次讀取內容

2.該方法在讀取大檔案的時候,可能會造成記憶體溢位的情況

解決:逐行讀取檔案內容

with open(r'a.txt', 'r', encoding='utf8') as f:

for line in f:

print(line)

# 涉及到檔案多行內容讀取的情況一般採用for迴圈讀取

3.1 文字模式
t 文字模式

1.預設的模式, r w a 其實是rt wt at

2.該模式所有操作都是以字串為基本單位(文字)

3.該模式必須要指定encoding引數

4.該模式只能操作文字檔案

3.2 二進位制模式
b 二進位制模式

1.該模式可以操作任意型別的檔案

2.該模式所有操作都是以bytes型別(二進位制)基本單位

3.該模式不需要指定encoding引數

指定模式的時候就需要rb wb ab

eg: 讀:

with open(r'a.txt', 'rb') as f:

data = f.read()

print(data, type(data)) # 英文正常顯示,中文是一串字元, 型別是bytes

寫:with open(r'a.txt', 'ab') as f:

data = '您好'

res = data.encode('utf8') # 將中文進行編碼

f.write(res) # 編碼之後再寫入,文字中正常寫入

4.1 檔案版登入註冊功能

註冊功能

# 要求使用者輸入使用者名稱和密碼

username = input("請輸入使用者名稱》: ").strip()

password = input("請輸入密碼》: ").strip()

# 格式化輸入的資訊,新增分隔符和換行符

msg = "%s|%s\n" % (username, password)

with open(r'user.txt', 'r', encoding='utf8') as f_reg:

# for迴圈讀取檔案內容

for line in f_reg:

# 取到使用者名稱的值

name = line.split("|")[0]

# 如果使用者輸入的使用者名稱與存在的使用者名稱一致就退出

if name == username:

print("使用者名稱已存在!")

break

else:

# 否則就將使用者輸入的資訊寫入到檔案

with open(r'user.txt', 'a', encoding='utf8') as f_reg_insert:

f_reg_insert.write(msg)

print("%s註冊成功" % username)

登入功能

# 接收輸入的使用者名稱和密碼

name = input("請輸入使用者名稱》: ").strip()

pwd = input("請輸入密碼》: ").strip()

with open(r'user.txt', 'r', encoding='utf8') as f_log:

# for迴圈讀取檔案每行內容

for line in f_log:

# 將檔案中的使用者名稱與密碼處理出來並解壓賦值

u_name, passwd = line.split("|")

# 判斷使用者輸入的使用者名稱密碼和檔案存在的使用者密碼是否相等,密碼後面有換行符也進行處理

# 如果相等就登入成功,否則就顯示登入失敗

if u_name == name and passwd.strip("\n") == pwd:

print("登入成功!")

break

else:

print("登入失敗,使用者名稱或密碼錯誤!")

整體功能實現

while true:

print('''

1.使用者註冊

2.使用者登入

3.退出系統

''')

# 接收使用者想要的功能編號

options = input("請輸入選項》: ").strip()

# 當編號為1的時候,實現使用者註冊功能

if options == '1':

# 要求使用者輸入使用者名稱和密碼

username = input("請輸入使用者名稱》: ").strip()

password = input("請輸入密碼》: ").strip()

# 格式化輸入的資訊,新增分隔符和換行符

msg = "%s|%s\n" % (username, password)

with open(r'user.txt', 'r', encoding='utf8') as f_reg:

# for迴圈讀取檔案內容

for line in f_reg:

# 取到使用者名稱的值

name = line.split("|")[0]

# 如果使用者輸入的使用者名稱與存在的使用者名稱一致就退出

if name == username:

print("使用者名稱已存在!")

break

else:

# 否則就將使用者輸入的資訊寫入到檔案

with open(r'user.txt', 'a', encoding='utf8') as f_reg_insert:

f_reg_insert.write(msg)

print("%s註冊成功" % username)

# 當使用者輸入編號為2時,就是登入功能

elif options == '2':

# 接收輸入的使用者名稱和密碼

name = input("請輸入使用者名稱》: ").strip()

pwd = input("請輸入密碼》: ").strip()

with open(r'user.txt', 'r', encoding='utf8') as f_log:

# for迴圈讀取檔案每行內容

for line in f_log:

# 將檔案中的使用者名稱與密碼處理出來並解壓賦值

u_name, passwd = line.split("|")

# 判斷使用者輸入的使用者名稱密碼和檔案存在的使用者密碼是否相等,密碼後面有換行符也進行處理

# 如果相等就登入成功,否則就顯示登入失敗

if u_name == name and passwd.strip("\n") == pwd:

print("登入成功!")

break

else:

print("登入失敗,使用者名稱或密碼錯誤!")

# 當使用者輸入3就退出整個迴圈

elif options == '3':

print("退出系統!!!")

break

else:

print("輸入的選項不正確,請重新輸入!")

4.2 簡易拷貝功能
src_path = input('原始檔絕對路徑: ').strip()

dst_path = input('目標檔案絕對路徑: ').strip()

with open(r'%s' % src_path, 'rb') as f:

with open(r'%s' % dst_path, 'wb') as copy_f:

for line in f:

copy_f.write(line)

Python 檔案操作(二)

檔案的讀寫重新整理操作,基本的命令總結如下表 命令說明 r唯讀 預設 r 讀寫 w寫入 先刪除原檔案,再重新建立,如果檔案不存在則建立 w 讀寫 先刪除原檔案,再重新建立,如果檔案不存在則建立,可以寫入輸出 a寫入 在檔案末尾追加新的內容,檔案不存在,則建立 a 讀寫 在檔案末尾追加新的內容,檔案不...

python檔案操作(二)

1。flush 實時將資料寫進磁碟 import sys,time for i in range 20 sys.stdout.write sys.stdout方法在同一行列印 sys.stdout.flush 每列印一次 寫入一次 time.sleep 0.3 每隔0.3秒列印一次2。truncat...

python檔案操作二(OS)

import os r os.path.isabs path 判斷是否是絕對路徑 返回上一級 path os.path.dirname path 返回目錄 result os.path.join path,拼接目錄,可以多層拼接 path os.path.abspath path path os.g...