Python Day8 文件程序练习

1、从键盘输入一些字符,逐个把它们写到指定文件里,直到输入@为止。

法1:

filename = input("请输入文件名:\n")
arr = []
str = input("请输入字符串:\n")
with open(filename, 'w') as f:
    while str != '@':
        if '@' in str:
            index = str.index('@')
            arr.append(str[:index])  # 数组里面添加在@前面的元素
            break
        else:
            arr.append(str + "\n")
        str = input()
    f.writelines(arr)

法2:

filename = input("请输入文件名:\n")
fo=open(filename,'w')
str = input("请输入字符串:\n")
while str != '@':
    if '@' in str:
        index = str.find('@')
        fo.write(str[0:index])
        break
    else:
        fo.write(str+"\n")
    str = input()
fo.close()

2、产生十个由10个字符组成的随机密码,密码由26个大小写字母、10个数字和8个特殊字符组成,且首字符不能相同,保存在文件随机密码.txt中

import random

random.seed(0x1010)
password = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" \
           "0123456789!@#$%^*"
ls = []
excludes = ""
pwd = ""
while len(ls) < 10:
    for i in range(10):
        pwd += password[random.randint(0, len(password) - 1)]
        if pwd[0] in excludes:  # 如果首字母在excludes里
            pwd = pwd.lstrip(pwd[0])  # 就删掉首字符
            pwd += password[random.randint(0, len(password) - 1)]  # 然后再补回来一个字符
            continue
    ls.append(pwd)
    excludes += pwd[0]
    pwd = ''  # 刷新pwd
fo = open('随机密码.txt', 'w')
fo.write("\n".join(ls))
fo.close()

在这里插入图片描述

3、使用字典和列表型变量完成某课程的考勤记录统计,某班有100名同学,名单由考生目录下文件Name.txt给出(每行一个学生姓名),某课程第一次考勤数据由考生目录下文件name.csv给出(每行一个出勤学生姓名)。请输出第一次缺勤同学的名单。

with open("name.csv", "r", encoding = "utf8") as fo:
    str1 = fo.readlines()  # 列表形式,里面存放字符串,例如['索栋广\n', '陶开\n', '阳岩\n',...]
ls = []
for line in str1:
    line = line.replace("\n", "")
    ls.append(line.split())  # 到堂人数;split将字符串分隔之后存放在列表中,split里填逗号也行,空格也行,主要是为了分成列表
    # 即列表ls里又添加了列表,嵌套列表,如[['索栋广'], ['陶开'], ['阳岩']]
with open("Name.txt", "r", encoding = "utf8") as fi:
    str2 = fi.readlines()
lsAll = []
for line in str2:
    line = line.replace("\n", "")
    lsAll.append(line)  # 总人数
    for first in ls:
        if first[0] in lsAll:  # 因为是嵌套列表,所以要用first[0]
            lsAll.remove(first[0])
print("第一次缺勤的同学有:")
n = 1
for first in lsAll:
    if n % 10 == 0:
        print(first, end = ",")  # 每十个人名一行
        print()
    elif n >= len(lsAll):
        print(first, end = "")  # 最后一个人名儿时去掉逗号
    else:
        print(first, end = ",")  # 用逗号分隔人名儿
    n += 1

在这里插入图片描述
且注意保存csv文件时要用utf-8的格式,如下:
在这里插入图片描述
txt存放总人名,csv存放到勤人名。txt减去csv就是没到勤的人。
遍历两个文件,把各自的人名存到各自列表里,再判断csv的列表里的元素项是否在txt的列表里,在就删除。最后剩下来的即是缺勤人。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值