学会python的基础操作题_第3章 Python基础-文件操作函数 文件操作 练习题
一.利用b模式,編寫一個cp工具,要求如下:
1. 既可以拷貝文本又可以拷貝視頻,圖片等文件
2. 用戶一旦參數錯誤,打印命令的正確使用方法,如usage: cp source_file target_file
提示:可以用import sys,然后用sys.argv獲取腳本后面跟的參數
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# cp工具
import sys
if len(sys.argv) != 3:
print("usage: cp source_file target_file")
sys.exit()
else:
source_file, target_file = sys.argv[1], sys.argv[2]
with open(source_file,"rb") as read_f,open(target_file,"wb") as write_f:
for line in read_f:
write_f.write(line)
二.Python實現 tail -f 功能
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
#tail -f工具
import sys,time
if len(sys.argv) != 2:
print("usage: tail file_name")
sys.exit()
else:
file_name = sys.argv[1]
with open(file_name,'rb') as f:
f.seek(0,2) # 每次都從文件末尾開始讀
while True:
line = f.readline()
if line:
print(line.decode('utf-8'),end='') # 讀取的每一行都去掉行尾的換行符
time.sleep(1)
有待優化,每次打開應該顯示最后10行。
三.文件的修改
文件的數據是存放于硬盤上的,因而只存在覆蓋、不存在修改這么一說,我們平時看到的修改文件,都是模擬出來的效果,具體的說有兩種實現方式:
方式一:將硬盤存放的該文件的內容全部加載到內存,在內存中是可以修改的,修改完畢后,再由內存覆蓋到硬盤(word,vim,nodpad++等編輯器)
import os
with open('a.txt') as read_f,open('.a.txt.swap','w') as write_f:
data=read_f.read() #全部讀入內存,如果文件很大,會很卡
data=data.replace('alex','SB') #在內存中完成修改
write_f.write(data) #一次性寫入新文件
os.remove('a.txt')
os.rename('.a.txt.swap','a.txt')
方式二:將硬盤存放的該文件的內容一行一行地讀入內存,修改完畢就寫入新文件,最后用新文件覆蓋源文件
import os
with open('a.txt') as read_f,open('.a.txt.swap','w') as write_f:
for line in read_f:
line=line.replace('alex','SB')
write_f.write(line)
os.remove('a.txt')
os.rename('.a.txt.swap','a.txt')
三.全局替換程序:
寫一個腳本,允許用戶按以下方式執行時,即可以對指定文件內容進行全局替換
替換完畢后打印替換了多少處內容
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
import sys
import os
if len(sys.argv) != 4:
print("usage: python3 replace old_str new_str filename")
sys.exit()
else:
old_str = sys.argv[1]
new_str = sys.argv[2]
filename = sys.argv[3]
filename_swap = sys.argv[3] + ".swap"
with open(filename,"r",encoding="utf-8") as read_f,open(filename_swap,"w",encoding="utf-8") as write_f:
count = 0
for line in read_f:
line = line.replace(old_str,new_str)
write_f.write(line)
num = line.count(new_str)
count += 1
totle = count * num
print("一共替換了%s處內容" % totle)
os.remove(filename)
os.rename(filename_swap,filename)
四.模擬登陸:
用戶輸入帳號密碼進行登陸
用戶信息保存在文件內
用戶密碼輸入錯誤三次后鎖定用戶,下次再登錄,檢測到是這個用戶也登錄不了
user_list.txt
wss:123:1
alex:456:1
jay:789:1
#!/usr/bin/env python3
# -*- encoding: utf8 -*-
import getpass
import os
user_dict = {}
with open("user_list.txt", "r", encoding="utf-8") as user_list_flie:
for line in user_list_flie.readlines():
user_list = line.strip().split(":")
# print(user_list)
_user = user_list[0].strip()
_pwd = user_list[1].strip()
_lockaccount = int(user_list[2].strip())
user_dict[_user] = {"user": _user, "pwd": _pwd, "lockaccount": _lockaccount}
# print(user_dict[_username])
# print(user_dict)
exit_flag = False
count = 0
while count < 3 and not exit_flag:
user = input('\n請輸入用戶名:')
if user not in user_dict:
count += 1
print("\n用戶名錯誤")
elif user_dict[user]["lockaccount"] > 0:
print("\n用戶已被鎖定,請聯系管理員解鎖后重新嘗試")
break
else:
while count < 3 and not exit_flag:
pwd = getpass.getpass('\n請輸入密碼:')
# pwd = input('\n請輸入密碼:')
if pwd == user_dict[user]["pwd"]:
print('\n歡迎登陸')
print('..........')
exit_flag = True
else:
count += 1
print('\n密碼錯誤')
continue
if count >= 3: # 嘗試次數大于等于3時鎖定用戶
if user == "":
print("\n您輸入的錯誤次數過多,且用戶為空")
elif user not in user_dict:
print("\n您輸入的錯誤次數過多,且用戶 %s 不存在" % user)
else:
user_dict[user]["lockaccount"] += 1
# print(user_dict[user]["lockaccount"])
with open("user_list.txt", "r", encoding="utf-8") as user_list_file, open("use_list.txt.swap", "w",encoding="utf-8") as new_user_list_file:
for new_line in user_dict:
new_user_list = [str(user_dict[new_line]["user"]), str(user_dict[new_line]["pwd"]),
str(user_dict[new_line]["lockaccount"])]
# print(new_user_list)
user_str = ":".join(new_user_list)
print(user_str)
new_user_list_file.write(user_str + "\n")
os.remove("user_list.txt")
os.rename("use_list.txt.swap", "user_list.txt")
print("\n您輸入的錯誤次數過多,%s 已經被鎖定" % user)
總結
以上是生活随笔為你收集整理的学会python的基础操作题_第3章 Python基础-文件操作函数 文件操作 练习题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 单片机课程设计数字心率计_课程设计-基于
- 下一篇: 没有shell63号单元_苏教版15年级