学会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基础-文件操作函数 文件操作 练习题相关推荐
- python编写程序解方程_第2章 Python初步 课后题
[单选题]建设中国特色社会主义,把我国建设成为富强.民主.文明.和谐.美丽的社会主义现代化强国,是我国各族人民的( ) [简答题]案例系统的测试报告,提交时间为9月28日,上午九点之前 [单选题]一份 ...
- python123第四章第五题_第五章 Python 函数
第1章 为什么要使用函数 #1.代码的组织结构不清晰,可读性差 #2.遇到重复的功能只能重复编写实现代码,代码冗余 #3.功能需要扩展时,需要找出所有实现该功能的地方修改之,无法统一管理且维护难度极大 ...
- 2020年上海市高等学校信息技术水平考试试卷_三级_数据科学技术及应用_模拟卷_四、操作题_答案
2020年上海市高等学校信息技术水平考试试卷_三级_数据科学技术及应用_模拟卷_四.操作题_答案 (本试卷考试时间 150 分钟) 答案是自己做的,经验证,可成功运行. 内容仅供学习交流,不可转载. ...
- Pytorch ——基础指北_叁 [Pytorch API 构建基础模型]
Pytorch --基础指北_叁 系列文章目录 Pytorch --基础指北_零 Pytorch --基础指北_壹 Pytorch --基础指北_贰 Pytorch --基础指北_叁 文章目录 Pyt ...
- Python入门到精通【精品】第一章 - Python概述
Python入门到精通[精品]第一章 - Python概述 1. Python语言历史 2. Python语言特点 3. Python的下载和安装 3.1. Python的下载 3.2. Python ...
- 小甲鱼python入门014课后题_小甲鱼零基础入门学习Python-014
==========ClassNote========= 1.接触过C语言的朋友应该知道,在C语言中,字符串和字符是两个不同的概念(C语言用单引号表示字符,双引号表示字符串).但在Python中并没有 ...
- python智慧树判断题_智慧树知到_大数据分析的python基础_判断题答案
智慧树知到_大数据分析的python基础_判断题答案 答案: 更多相关问题 强心苷中毒先兆症状A.一定次数的早搏B.窦性心律低于60次/minC.视色障碍D.房室传导阻滞E.室性心动 强心苷在临床上可 ...
- python计算机二级操作题_计算机二级Python考试心得分享体会总结
前言: 我叫夏某鸣,德州学院,大二学生,在学习python之前,学习过c语言,数据结构,做过嵌入式开发,有一点功底,但是不多,通过学习不同的语言的编程也锻炼了一些思维,但涉猎面还是不广,也不怎么精通, ...
- python难度大的题_早看少被坑!Python 最难的问题
超过十年以上,没有比解释器全局锁(GIL)让Python新手和专家更有挫折感或者更有好奇心. 未解决的问题 随处都是问题.难度大.耗时多肯定是其中一个问题.仅仅是尝试解决这个问题就会让人惊讶.之前是整 ...
最新文章
- 如何使窗体不重复被打开
- github page + jekyllrb 搭建新博客
- dreawever与php做网页,教程方法;Drea、mweaver CS5更改代码颜色方法电脑技巧-琪琪词资源网...
- 区块链学习笔记:D02 区块链的技术发展历史和趋势
- 计算机专业中职好就业不,内江计算机专业中职好不好
- 使用QML编写舒尔特表小程序
- opencv3 与opencv2不同之处
- 安卓psp模拟器联机教程_安卓PSP模拟器评测:蜘蛛侠2
- 三级等保测评,如何通过验收
- leetcode 5390. 数青蛙(C++)
- 服务器怎么多开虚拟机,服务器多开虚拟机操作系统
- WARN: Establishing SSL connection without server‘s identity verification is not recommended
- 水溶性CdseTe ZnS量子点
- 夏天推荐凉快的地方不嫌多!四明山这里更是集凉爽与好玩一起
- 如何提高代码质量,或者说高质量代码的特征是什么
- 手游大话藏宝阁找不到服务器,大话西游手游藏宝阁指定交易在哪里 藏宝阁怎么没有指定我...
- 计算机网络故障与维护方法,试论计算机网络故障处理及维护方法
- 西门子S7200/300/400以太网通讯处理器选型
- php 获取url扩展名,php 从url中获取文件扩展名
- 快播团队悄然崛起:连获2大奖,业内充分肯定,抢先布局千亿市场