DAY 4 文件操作练习 - 全局文本检索替换 & 用户登录认证程序 & 股票查询程序

全局文本检索替换

需求:写一个脚本,允许用户按以下方式执行时。既可以对指定文件内容进行全局替换,且替换完毕后打印替换了多少处内容。写完后的脚本调用方式如下:

python your_script.py old_str new_str filename

代码:

import sys

# sys.argv
# 这是一个列表,执行脚本时,外部传入的任何参数都会传入此处
# 该列表的第一个元素永远是文件路径
print(sys.argv)
#输出:['C:/Users/hmy24/Desktop/python学习/学习使用pycharm/作业专用/全局文本检索替换.py']

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

#第一步,读到内存
f = open(filename,"r+")
data = f.read()

#第二步:统计与替换
old_str_count = data.count(old_str)
new_data = data.replace(old_str,new_str)

#第三步:清空旧文件
f.seek(0)
f.truncate()

#将新数据写入文件
f.write(new_data)
print(f"成功替换字符‘{old_str}’为‘{new_str}’,共{old_str_count}次。")

用户登录认证程序

需求:

要求用户输入账号密码进行登录。用户账号信息保存在文件内。用户密码输入三次后锁定用户,下次再登录,检测到这个是被锁定的用户,则依然不允许登录,并提示账号已经被锁定。

# 1.创建一个文件存储用户信息,命名为account.db
# 初始数据:
# alex,111111,1
# jack,222222,0
# rain,333333,0


# 2.把账号数据读取到内存,并使之更改为list格式
accounts = {}
f = open("account.db","r")
for line in f:
    line = line.strip().split(",")  #用strip()去掉换行符,用split()将数据按英文逗号分割成元素
    accounts[line[0]] = line    #将用户信息条目加入字典
# print(accounts)
# 输出:{'alex': ['alex', '111111', '0'], 'jack': ['jack', '222222', '0'], 'rain': ['rain', '333333', '0']}


# 3.使用循环结构,要求用户输入账号信息并进行判断
# 用户名判断
account = input("请输入账号:")
while account not in accounts:
    account = input("无效账号!请重新输入正确账号:")
# 用户锁定判断
if int(accounts[account][2]) != 0:   #记得使用int()完成类型转换,因为列表中的元素为字符串
    print("该账号已被锁定,请联系管理员。")
    exit()
# 密码判断
count = 2
password = input(f"请输入密码(共有{count+1}次机会):")
while count :
    if password == accounts[account][1]:
        print(f"登录成功!欢迎您,{account}!")
        break
    else:
        password = input(f"密码错误,请重新输入(还有{count}次机会):")
        count -= 1


# 4.修改此次锁定账号在文件中的锁定状态
if count == 0:
    print(f"账号{account}已被锁定!请联系管理员。")
    accounts[account][2] = "1"    #注意!一定要加引号使用字符串格式,因为下面的join只接受传入字符串格式的数据
    #光在这里改还不行,还要写入文件
    f2 = open("account.db","w")
    for key,val in accounts.items():    #字典只支持遍历key,如果想遍历值则需要加上items()
        line = ",".join(val) + "\n" #将列表转成字符串
        f2.write(line)
    f2.close()

股票查询程序

需求:程序启动后,给用户提供查询接口,允许域用户重复查看股票行情信息。允许用户通过模糊查找股票名,比如输入“啤酒”就把所有股票名称中包含“啤酒”的信息打出来。允许按股票价格、涨跌幅、换手率这几列来筛选信息,比如输入“价格>50”则把价格大于50的股票都打印出来,输入“市值率<50”,则把市值小于50的股票打印(尝试不使用判断?)。思路提示:加载文件内容到内存,转成dict或者list结构,然后对其进行查询等操作。这样以后就不用每查一次就打开一次文件,效率更高。)

P.S.按照我现在的水平还没能写出来……参考了这位博主的代码,贴在这里。虽然几乎是照抄,但这段代码在我这里还是因为一些编码问题没能运行起来。日后有能力了再完善。

小试牛刀 python股票查询程序_魔童a的博客-CSDN博客_股票查询程序python股票查询程序一、具体需求程序启动后,给用户提供查询接口,允许用户重复查股票行情信息(用到循环)允许按股票价格、涨跌幅、换手率等来筛选信息加载文件内容到内存,以字典的形式保存,这样就不用每次都打开文件,效率高。二、具体步骤详解1.所用到的数据信息文件代码如下(示例):股票代码,股票名称,当前价,涨跌额,涨跌幅,年初至今,成交量,成交额,换⼿率,市盈率(TTM),股息率,市值SH601778,N晶科,6.29,+1.92,+43.94%,+43.94%,259.66万,1625.5.https://blog.csdn.net/weixin_43407213/article/details/110926432

import re

# f = open("stock_data.txt","r",encoding='utf-8')
f = open("stock_data.txt","r",encoding='utf-8',errors='ignore')
dict = {}
title = f.readline().strip().split(',') #分解标题行
print(title)
for line in f.readlines():  #通过循环将所有股票数据传入字典中
    line = line.strip().split(',')
    dict[line[1]] = line

while True:
    data = input()
    if data == 'exit':
        exit("再见!")
    if '>' not in data and '<' not in data:
        print("输入格式错误,请重新输入!")
        continue
    a = re.split('>|<',data)    #正则,按>或者<来分割,获得分隔后的list
    key = data[len(a[0])]   #将符号拎出来
    index = title.index(a[0])
    if a[0] not in title:
        print("不存在查询项!")
        continue
    print(title)
    for i in dict.values(): #values()函数不懂
        if key == '>':
            # 使用正则将字符串中的所有浮点数和整数提取出来,再将string转化成float类型即可
            if float(re.findall(r'\-*\d+(?:\.\d+)?',i[index][0])) > float(re.findall(r'\-*\d+(?:\.\d+)?',a[1][0])):
                print(i)
            elif key == '<':
                if float(re.findall(r'\-*\d+(?:\.\d+)?', i[index][0])) < float(re.findall(r'\-*\d+(?:\.\d+)?', a[1][0])):
                    print(i)

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值