python学习_day2_文件操作

0.基础知识

  • seek方法是按照字节进行查找,UTF-8中文3字节,英文1字节。
  • tell方法返回光标当前位置
  • flush方法将缓存区中的数据写入硬盘,将关键数据手动存入硬盘防止断电丢失。
  • readline方法只读一行遇到\r or \n停

要想修改文件,不是改写而是插入,首先打开文件加载到内存,然后修改,清除原先文件内容,最后将内存中数据重新存于硬盘的一个新区域。

1.例题1

  • 全局文本检索替换,并且打印替换了多少处
  • 调用方式:python your_script.py old_str new_str filename
import sys #导入外部参数

old_str = sys.argv[1]
new_str = sys.argv[2]
filename = sys.argv[3]

#  1. load into ram
f = open("filename","r+")   # 拓展读模式,可改写
data  = f.read()

# 2. count and replace
old_str_count = data.count(old_str)
new_data = data.replace(old_str,new_str)

# 3.clear old filename
f.seek(0) #将光标移动至最开始
f.truncate() #保留x个字节的文本,其余全部删除,x默认为0

# 4. save new data into file
f.write(new_data)
f.close()

print(f'"成功替换字符'{old_str}' to '{new_str}', 共计{old_str_count}处...")

2.例题2

  • 登录认证程序
  • 可判断账户是否存在 若存在有三次输入密码机会,若错误则锁定 若不存在则输出提示
# msgdb1:
szp,1a23,0
szsp,1aw23,0
szap,1a23,0
# 1.加载数据库
fr = open("msgdb1", "r")
account_db = {}

for line in fr:
    line = line.strip().split(",") # strip() 去掉换行符; split(",") 以,拆分字符串
    # print(line)
    account_db[line[0]] = line
print(account_db)

# 2.账户处理 
while True:
    user_name = input("please input your account:")
    if user_name not in account_db:
        print("not find this account!")
    else:
        cnt = 1
        while cnt <= 3:
            pw = input("please input your password:")
            if pw == account_db[user_name][1]:
                exit(f"{user_name}, welcome!")
            else:
                print(f"password is false, you have {3 - cnt} chances to input!")
                cnt += 1

        account_db[user_name][2] = "1"  # 修改内存中的数据库
        fw = open("msgdb1", "w")
        for user, var in account_db.items():  # account_db.items(): 返回一个包括所有元素的列表
            line = ",".join(var) + "\n"  # 把列表各个元素以“,"分隔再转成字符串
            fw.write(line)
        fr.close()
        fw.close()
        exit("your account have been locked!")

猜你喜欢

转载自blog.csdn.net/qq_43445577/article/details/115373987