文件操作练习

Python文件操作与异常处理编程练习 本文提供了多个Python编程练习,涵盖文件读写、异常处理、字符串处理等基础编程技能。通过示例代码,讲解了如何打开和操作文件、处理IOError和ValueError异常、读取和写入数据、处理用户输入等常见任务。适合初学者巩固Python基础编程能力。 阅读详情

****Test 7 第一题****

逐页显示文本文件的程序,用户输入一个文件名,每次默认
显示行数为10行,给用户一个选项,”是否继续?(Y|N)

import os


def view(filename):#定义一个显示文件内容的函数
    if os.path.exists(filename):#判断其存不存在
        with open(filename) as f:
            for i in range(10):#显示十行
                a = f.readline()
                print(a.strip())
                if a == '':#不够十行时,显示完就就结束
                    exit()

            user_in = input('是否继续?(Y|N)')
            while 1:#循环显示
                if user_in.upper() == 'Y':
                    for i in range(10):
                        a = f.readline()
                        print(a.strip())
                        if a == '':
                            exit()
                    user_in = input('是否继续?(Y|N)')
                else:
                    break

    else:
        print('未找到该文件!')


view('/root/Desktop/xxx')#将/etc/passwd文件拷贝至桌面做实验


****Test 7 第二题****


将文件夹下所有图片名称加上'_fc',并计算你处理的图片个数和花费时间

import time
import os
list1 = ['/root/Desktop/' + 'day' + str(i)+'.png' for i in range(1, 9)]
for i in list1:#在桌面创建8张照片
    with open(i,'w') as f:
        f.write(i)

def change_name(dirpath):
    if os.path.exists(dirpath):
        start = time.time()
        picture_list = [i for i in os.listdir(dirpath) if i.endswith('.png')
                        or i.endswith('.bmp') or i.endswith('.png') or i.endswith('.gif')
                        or i.endswith('.webp')]#将目录下的图片文件列表
        for i in picture_list:#遍历进行重命名
            a = os.path.splitext(i)
            os.rename(dirpath + i, dirpath + a[0] + '_fc' + a[1])
        print('rename完成!')
        end = time.time()
        return end - start
    else:
        print('未找到该目录!')


print(change_name('/root/Desktop/'))
print(os.listdir('/root/Destop/'))


****Test 7 第三题****


Python在指定目录及其子目录中查找文件名含有关键字的文件



import os

###在桌面创建目录及文件模拟题目环境
info1=['hellopy.py','lkhello.txt','javahello.c','helolo.jpg']
info2=['heihello.py','suphello.txt','sbhello.c']
os.makedirs('/root/Desktop/test/123')
for i in info1:
    os.mknod('/root/Desktop/test/'+i)
for i in info2:
    os.mknod('/root/Desktop/test/123/' + i)


def find_file(dirpath, key):
    if os.path.exists(dirpath):#判断目标目录是否存在

        file_list = [i for i in os.listdir(dirpath) if os.path.isfile(dirpath + i)]#对父目录下的文件列表
        dir_list = [i for i in os.listdir(dirpath) if os.path.isdir(dirpath + i)]#对父目录下的目录列表

        for i in dir_list:#遍历这些子目录

            dirpath = dirpath + i + '/'
            for i in [i for i in os.listdir(dirpath) if os.path.isfile(dirpath + i)]:
                file_list.append(i)##将子目录下的文件添加进文件列表中
        key_file = [i for i in file_list if key in i]#将满足关键字的文件重新列表
        return key_file
    else:
        print('未找到该目录!')


print(find_file('/root/Desktop/test/', 'hello'))



****Test 7 第四题****


修改之前的用户管理系统,将用户信息保存在文件中;
    保存格式为: 用户名,密码....(注意:相关信息用逗号分隔);
"""

#<eval(dict)将字符串转换为字典>

info={'root': {
        "name": "root",
        "passwd": "redhat",
        "gender": 1,  # 1:男,2:女;
        "email": "root@qq.com",
        "age": 18,
        'time': '2018-05-07 15:27:06'}}

with open('/root/Desktop/info', 'w') as f:#将字典信息写入文件中
    f.write(str(info))
menu = """"

    1). 注册新用户
    2). 删除用户
    3). 显示用户信息
    4). 退出系统(exit(0))

"""


def addUser():
    print("01-用户注册界面".center(20, '*'))
    inname = input("*注册用户名:").strip().lower()
    # 判断用户是否已注册?
    with open('/root/Desktop/info') as f:
        for i in f:
            if inname not in eval(i).keys():

                passwd = input("*密码:")
                gender = input("性别(1-男,2-女):")
                if not gender:
                    gender = None
                else:
                    gender = int(gender)
                email = input("邮箱地址:")
                if not email:
                    email = None
                age = input("年龄:")
                if not age:
                    age = None
                else:
                    age = int(age)
                info[inname] =  {
                    "name": inname,
                    "passwd": passwd,
                    "gender": gender,  # 1:男,2:女;
                    "email": email,
                    "age": age
                }
                with open('/root/Desktop/info', 'w') as f1:#将注册信息保存在文件中
                    f1.write(str(info))
                    print("用户%s注册成功" % (inname))
                    break
            else:
                print('Error:用户%s已注册!' % (inname))


def deleteUser():
####删除文件中信息
    with open('/root/Desktop/info') as f:
        a = [eval(i).keys() for i in f][0]
        inuser = input("注销的用户名:").strip().lower()
        if inuser in a:#判断用户是否存在
            info = ''
            ###通过重新写入删除文件信息
            for i in f:
                if inuser in eval(i).keys():
                    pass
                else:
                    info += ('\n' + i)
            with open('/root/Desktop/info', 'w') as f1:
                f1.write(info)
                print('%s用户成功注销!' % inuser)

        else:
            print("用户名%s不存在" % (inuser))


def make():
    while True:
        print("用户管理系统".center(40, '*'), menu)
        choice = input("请输入你的选择:")
        if choice == '1':
            addUser()
        elif choice == '2':
            deleteUser()
        elif choice == '3':
            with open('/root/Desktop/info') as f:
                print(f.read())
        elif choice == '4':
            exit(0)
        else:
            print("Error:错误输入!<请输入正确的选择.>")


def main():
    import time
    tryCount = 0
    while tryCount < 3:
        tryCount += 1
        inuser = input("用户名:").strip().lower()
        with open('/root/Desktop/info') as f:
            for i in f:
                if inuser in eval(i).keys():
                    inpasswd = input("密码:")
                    passwd = eval(i)[inuser]['passwd']
                    if inpasswd == passwd:
                        print("%s登陆成功!" % (inuser))
                        times = int(time.time())
                        if times - time.mktime(
                                time.strptime(eval(i)[inuser]['time'], '%Y-%m-%d %H:%M:%S')) < 4 * 60 * 60:
                            print('You already logged in at:%s ' % eval(i)[inuser]['time'])
                        eval(i)[inuser]['time'] = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(times))
                        make()
                    else:
                        print("用户%s的密码错误!" % (inuser))
                else:
                    print("用户名%s不存在" % (inuser))
    else:
        print("尝试次数超过3次!")


main()





****Test 7 第五题****


修改之前的ATM管理系统,要求如下:
1). 每个选项操作前,显示用户欢迎信息;
    eg: "***************ATM系统转账操作***************"
    eg: "***************ATM系统存款操作***************"

2). 用户执行操作前显示操作时间;
3). 用户执行后显示结束时间;
4).要求时间格式不是时间戳,而是我们可以看懂的(百度搜索);


info = {
    "001": {
        "cardid": "001",
        "password": "123",
        "status": 0,
        "money": 10000
    }}

menu = """"

    1). 注册新用户
    2). 取款
    3). 存款
    4). 转账
    5). 查询余额
    6). 冻结账户
    7). 修改密码
    8). 退出

"""


def main():
    tryCount = 0
    while tryCount < 3:
        tryCount += 1
        inuser = input("用户名:").strip().lower()
        if inuser in info:
            if info[inuser]['status'] == 0:
                inpasswd = input("密码:")
                passwd = info[inuser]['password']
                if inpasswd == passwd:
                    print("%s登陆成功!" % (inuser))
                    while True:
                        print("用户管理系统".center(40, '*'), menu)
                        choice = input("请输入你的选择:")
                        if choice == '1':
                            add_user()
                        elif choice == '2':
                            out_money(inuser)
                        elif choice == '3':
                            in_money(inuser)
                        elif choice == '4':
                            trans_money(inuser)
                        elif choice == '5':
                            view(inuser)
                        elif choice == '6':
                            freeze(inuser)
                        elif choice == '7':
                            mod_passwd(inuser)
                        elif choice == '8':
                            exit(0)
                        else:
                            print("Error:错误输入!<请输入正确的选择.>")
                else:
                    print("用户%s的密码错误!" % (inuser))
            else:
                print('该用户处于冻结状态,请前往服务台办理服务!')
        else:
            print("用户名%s不存在" % (inuser))
    else:
        print("尝试次数超过3次!")


def add_log(fun):
    import datetime
    def wrapper(*args, **kwargs):
        print(datetime.datetime.now())
        a = fun(*args, **kwargs)
        print(datetime.datetime.now())
        return a

    return wrapper


@add_log
def add_user():
    print("用户注册界面".center(20, '*'))
    cardid = input("*注册用户名:").strip().lower()
    # 判断用户是否已注册?
    if cardid in info:
        print('Error:用户%s已注册!' % cardid)
    else:
        password = input("*密码:")
        status = int(input("状态(1-冻结,0-使用):"))
        info[cardid] = {
            "cardid": cardid,
            "password": password,
            "status": status,  # 1:男,2:女;
            "money": 0
        }
        print("用户%s注册成功" % (cardid))


@add_log
def out_money(inuser):
    print("ATM系统取款操作".center(20, '*'))
    moneycount = int(input('取钱金额:'))
    if moneycount <= info[inuser]['money']:
        info[inuser]['money'] -= moneycount
        print('出款成功!')
    else:
        print('余额不足!')


@add_log
def in_money(inuser):
    print("ATM系统存钱操作".center(20, '*'))
    moneycount = int(input('请输入存款金额:'))
    info[inuser]['money'] += moneycount
    print('存款成功!')


@add_log
def trans_money(inuser):
    print("ATM系统转账操作".center(20, '*'))
    inuser1 = input('请输入账户名:')
    if inuser1 not in info:
        print('Error!该用户不存在!')
    else:
        money = int(input('请输入金额:'))
        if info[inuser]['money'] >= money:
            info[inuser]['money'] -= money
            info[inuser1]['money'] += money
            print('转账成功!')
        else:
            print('余额不足!')


@add_log
def view(inuser):
    print("ATM系统查询操作".center(20, '*'))
    print('余额为:%s' % info[inuser]['money'])


@add_log
def freeze(inuser):
    print("ATM系统冻结账户操作".center(20, '*'))
    info[inuser]['status'] = 1
    print('用户已冻结!')
    exit(0)


@add_log
def mod_passwd(inuser):
    print("ATM系统密码修改操作".center(20, '*'))
    while 1:
        newpasswd = input('请输入新密码:').strip()
        if not newpasswd:
            print('密码不能为空')
        else:
            break
    again = input('请再次输入密码:').strip()
    if newpasswd == again:
        info[inuser]['password'] = newpasswd
        print('密码修改成功!')
    else:
        print('失败!两次密码不一致!')


main()





****练习test1  文件操作****


序号 ID 操作者 操作行为 操作行为 操作对象
6883 556773833 RemyMCMXI
6880 556772838 Mindmatrix restored undeleted RemyMCMXI
6882 556771715 RemyMCMXI
6881 556770863 RemyMCMXI
6880 556673938 Liua97
6879 554350969 Epicgenius
6880 554332653 Alex

找到restored所在行,得到该行序号6880,然后往下读,
找到第一个与其序号相同的行(liua97那行),
然后记录下这两行之间所有的id值(包括restored那行),
这个例子就是记录下556772838 556771715 556770863这三个id

with open('/root/Desktop/test1', 'a+') as f:#创建文件
    f.write('6883 556773833 RemyMCMXI\n'
            '6880 556772838 Mindmatrix restored undeleted RemyMCMXI\n'
            '6882 556771715 RemyMCMXI\n'
            '6881 556770863 RemyMCMXI\n'
            '6880 556673938 Liua97\n'
            '6879 554350969 Epicgenius\n'
            '6880 554332653 Alex\n')
    f.seek(0,0)
    info = [i.split() for i in f]#遍历文件内容,转换成列表方式嵌套方式记录内容
    num = len(info)
    for i in range(num):
        if 'restored' in info[i]:#找到关键字所在行
            for j in range(i + 1, num):
                if info[i][0] == info[j][0]:#找到与关键字所在行ID相同的一行
                    print([k[1] for k in info[i:j]])#遍历输出所有ID
                    break




****练习test2  循环提取文件内容****



import os
#在桌面创建八个文件并输入内容
list1 = ['/root/Desktop/' + 'day' + str(i)+'.py' for i in range(1, 9)]
for i in list1:
    with open(i, 'w') as f:
        f.write(i)

#模拟题目要求,在桌面进行文件内容合并
def combine(dirpath, suffix, newdirpath, newname):#定义合并函数
    if os.path.exists(dirpath) and os.path.exists(newdirpath):
        oldfile = [i for i in os.listdir(dirpath) if i.endswith(suffix)]#找到所有需要进行合并的文件
        for i in oldfile:
            with open(dirpath + i) as f1, open(newdirpath + newname, 'a+') as f2:#依次写入新文件中
                for i in f1:
                    f2.write(i+'\n')
                    os.remove(i)#写入完成.删除源文件
        print('文件合并完成!')
    else:
        print('找不到该目录!')
combine('/root/Desktop/','.py','/root/Desktop/','all.py')
with open('/root/Desktop/all.py') as f:
    print(f.read())




****练习test3  日志文件****


# 1. 创建add_log装饰器, 被装饰的函数日志信息被记录到/var/log/python.log文件中;
# 2. 日志格式为: [字符串时间] Level: 日志级别 Name: 函数名称, Runtime:xxx  Result:xxx
[注]: 装饰器带有参数;
import time


# 创建装饰器
def add_log(type):
    def add_info(fun):
        def wrapper(*args, **kwargs):
            start_time = time.time()
            time.sleep(1)
            a = fun(*args, **kwargs)
            end_time = time.time()

            with open('/var/log/python.log', 'a+') as f:  # 记录日志
                f.write('%s  Level : %s , Name:%s , Runtime:%.5d  Result : %s'
                        % (time.ctime(), type, fun.__name__, end_time - start_time, a))
                print('日志记录成功!')

        return wrapper

    return add_info


@add_log('warn')
def python(x, y):
    return x * y / 2


python(4, 5)
with open('/var/log/python.log') as f:
    print(f.read())




***********THE END***********

C++编程练习与文件操作详解 本文涵盖多个C++编程实践问题,包括计算平均值与方差、有序列表的插入与删除、文件读写操作、标准模板库(STL)的使用等内容。详细展示了函数编写、数据处理、文件操作及常用算法实现,适合C++初学者和进阶者参考学习。 阅读详情

相关推荐

C++文件操作与异常处理编程练习

本文包含多个C++编程练习,涵盖文件操作、输入输出流、字符串处理、异常检测及函数编写等内容。具体包括文件的打开与关闭、ifstream与ofstream的使用、二进制与文本模式操作、标准流输出验证、异常处理机制、字符串处理函数编写以及数据校验逻辑实现。

w3x4y的博客 939

Python经典基础习题(文件与文件夹操作)

Python经典基础习题(文件与文件夹操作)

AQIANKE的博客 9342

65、C编程练习与文件操作知识

本博客深入介绍了C#编程中的多个重要主题,包括多种类型的编程练习、文件操作知识、数据组织与流的概念、顺序访问文本文件的读写和搜索操作,以及对象的序列化与反序列化。通过详细的代码示例和项目实践,帮助开发者提升C#编程技能,并掌握数据持久化存储和传输的方法。内容还涵盖了调试常见错误及对远程编程工作的思考,适合希望全面掌握C#应用开发的读者。

4k5l6j7h8的博客 63

python练习|文件操作

自我练习,仅供交流~

py_hope 1175

06-文件操作-练习

🎉 欢迎回来!今天我们探索了Python的文件操作魔法,这些技能可以帮助我们将魔法咒语和知识永久保存下来。现在让我们通过一些有趣的练习来巩固这些知识吧!

86

Java编程练习:文件操作与Web应用开发

本文通过分析一系列Java编程练习,探讨了文件处理、字符串操作、异常处理等编程技巧,并介绍了如何使用JSP技术开发简单的Web应用程序。通过具体的代码示例,文章展示了如何对文本文件进行排序、移除注释、统计单词出现次数,以及如何创建Web表单和计算平均分。

weixin_42433737的博客 434

Python编程入门: 文件操作30例

Python编程入门: 文件操作30例

weixin_46121540的博客 2785

C语言指针与文件操作进阶练习解析

本文深入探讨了C语言中的指针概念和文件操作技巧。通过解析书籍章节中的代码示例和习题解答,详细解释了指针算术、字符串处理函数的实现,以及如何统计文件中字母出现次数、复制文件只包含字母字符、计算单词数量等实际应用场景。文章不仅提供了理论知识,还给出了实际编码的解决方案。

weixin_29363791的博客 348

【Python】7. 基础语法(5) -- 文件+库+习题篇

该篇文章包含文件路径,文件操作,上下文管理器,如何使用库,标准库,第三方库,如何使用库进行习题练习。快来看看吧!

哈茶的博客 1411

Halcon 简单的形状匹配定位与区域跟随

【代码】Halcon简单的形状匹配定位与区域跟随。

唐大狗 2806

RRAM/ Near Memory Computing (NMC) Survey - Reading Notes 0707

Reading Notes of Resistive Random Access Memory – Day 2 Chapter 3 RRAM Characterization and Modeling Overview of RRAM Physical Mechanism A general picture for the filamentary switching mechanism. Forming: 对本征RRAM样本,加电压VformingV_{forming}Vforming​,中间氧化层的O

Blog of Lucky H6 992

python小练习--文件操作

练习1:文件操作的初体验与编码问题 write(a):把字符串 a 写入到文件中 writelines(b):把字符串列表写入文件中,不添加换行符 f = open(r"a.txt","w",encoding="utf-8") #指定utf-8编码 f.write("今天是2020-11-16") f.close() 编码与解码相匹配,可以正常的查看信息 f = open(r"Blank.txt","a",encoding="utf-8") s = ["Clichong\n","Lawrence\n"

Clichong 1145

【智能体】零代码实战:Coze多智能体协作开发全流程解析

本文详细解析了Coze平台的多智能体协作开发全流程,从入门指南到实战技巧,帮助用户零代码构建高效AI团队。通过模块化设计和专业分工,多智能体系统能显著提升任务处理速度和准确率,适用于客服、内容创作、教育培训等多个场景。文章还提供了性能优化和常见问题解决方案,助力开发者快速掌握Multi-Agent技术。

weixin_29239279的博客 336

python 文件操作练习题

import os while True: mulu = input('请输入目录:') if os.path.exists(mulu): # 判断是否存在此目录 os.chdir(mulu) # 留在此目录 ret = os.listdir(os.getcwd()) # 打印出此目录的所有文件 print(ret) ...

有点坏。的博客 2461

【scratch音乐课】天空之城:音符与节拍、消息与链表

scratch是一个非常小巧的青少年编程工具,自带程序编写语句,积木式语句非常直观、易用,可创作数学、科学、音乐、绘画等方面作品。本文用scratch“演奏”一首大家非常熟悉的《天空之城》,并向大家介绍一些基本乐理知识,以及scratch中消息、链表的使用。

★·°立芯;︶︵︶ 1万+

展锐双摄帧同步实战:从配置到调试的完整避坑指南

本文深入剖析了在展锐平台上实现双摄帧同步的完整流程与核心技术。详细对比了硬件帧同步与软件帧同步的差异、应用场景及核心挑战,提供了从XML配置、驱动层适配到调试验证的实战指南。重点强调了硬件帧同步必须与固定帧率强绑定这一关键避坑点,并分享了针对景深虚化等场景的同步质量验证方法及长稳测试策略。

kiwi8的博客 402

pycharm文件操作的练习

weixin_47793088的博客 327

MacOS上VScode配置PlatformIO Core的疑难杂症与提速实战

本文详细解析了在MacOS上使用VScode配置PlatformIO Core时遇到的安装卡死、新建项目缓慢等常见问题,并提供了官方脚本安装、网络优化、命令行预下载等实用解决方案。通过环境变量配置和镜像源加速,大幅提升开发效率,特别适合ESP32等嵌入式开发场景。

weixin_42567046的博客 221

Linux文件操作命令的练习

⦁ 在/目录下新建目录s1/s2/s3,在s2中新建t2.txt,输入”Hello”,在s3目录下新建t3.txt,输入“world!⦁ 新建2个文件d1.txt d2.txt ,使用vim打开d1.txt 输入“Hello World”字符串,将d1.txt 硬链接到d2.txt ,查看2个文件的硬连接数。⦁ 使用head命令访问网卡配置文件中的前4行并存储到/root/NICETC.txt中,且显示内容。⦁ 在/etc/passwd中搜索sshd 所在行的上下各3行信息。

nihuhui666的博客 315

从零开始用Plaxis 2D设计深基坑支护结构:含地锚与桩墙实战教程

本文提供了一份基于Plaxis 2D的深基坑支护结构设计实战教程。教程以钻孔灌注桩排桩结合预应力锚索的典型支护体系为例,详细阐述了从地质模型建立、材料参数定义(重点介绍硬化土模型)、施工阶段模拟(含开挖、锚索施加预应力和地下水渗流固结耦合分析)到结果解读与设计优化的全流程。旨在帮助岩土工程师掌握数值模拟核心,实现从经验设计到量化分析的跨越。

kotlin6android的博客 505

ubuntu下编译qtwebengine

ubuntu qtwebengine

tianyu的专栏 - Linux site:blog.youkuaiyun.com/wishfly 1463

Python第七章05:文件操作综合练习题

B站黑马程序员,自学笔记分享

Seeding_Python的博客 920

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

[Python学习日记-27] 文件操作练习题解析

Python 文件操作的练习

JovaZou的成长之路 827

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

2019/05/23:目录文件操作练习

#encoding=utf-8 """ 1. 查找某个目录下是否存在某个文件名 """ #先到指路径下,把里面所有的文件打印出来,再判断要找的文件是不是在目录下 import os def fileIsExcist(path,file): os.chdir(path)#到目标目录下 dirsAndFiles=os.listdir(path) if file in dirs...

sinat_18722099的博客 222

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Python篇:文件操作练习

题目1.批量修改文件名2.读取一个文件,显示除了以井号(#)开头的行以外的所有行。3.制作一个"密码薄",其可以存储一个网址(例如 www.csdn.net),和一个密码(例如 123456),请编写程序完成这个“密码薄”的增删改查功能,并且实现文件存储功能4.无重复字符的最长子串5.矩阵置零 1.批量修改文件名 import os folderName = os.path.realpath('...

Dreaming5498的博客 3141
上一篇: 函数及生成器
下一篇: 模块与包,文件操作
wl_python
博客等级 码龄9年 21粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值