首页 > 编程语言 >Python 实验六 文件操作

Python 实验六 文件操作

时间:2024-11-16 15:18:40浏览次数:3  
标签:文件 Python 程序 文件夹 实验 File path os

实验六 文件操作

一、实验学时: 2学时

二、实验目的

  1. 掌握:Python中有关文件读写的方法;
  2. 掌握:与文件相关的函数与标准库的用法;
  3. 掌握:内置函数open()用法,熟练运用with关键字;
  4. 掌握:os、os.path、shutil标准库中常用函数的用法。

三、实验内容

  1. 创建一个程序,要求用户输入一个文件夹路径,程序需要列出该文件夹下的所有文件和文件夹。
  2. 编写一个程序,要求用户输入一个文件夹路径和一个文件扩展名,程序需要找出该文件夹中所有该扩展名的文件,并将它们复制到新的文件夹中。
  3. 编写一个程序,要求用户输入一个文件夹路径,程序需要递归地遍历该文件夹下的所有文件和子文件夹,并将所有文件的大小求和。
  4. 编写一个程序,要求用户输入一个文件夹路径和一个关键词,程序需要在该文件夹下的所有文件中查找该关键词,并返回包含该关键词的文件名。

四、实验结果

(在此部分列出保持缩进格式的程序代码及运行结果截图,请注意保持格式统一,截图清晰,大小合适)

  1. 创建一个程序,要求用户输入一个文件夹路径,程序需要列出该文件夹下的所有文件和文件夹。

    代码块:
    # 程序名:test6.1
    # 功能:创建一个程序,要求用户输入一个文件夹路径,程序需要列出该文件夹下的所有文件和文件夹。
    
    # 日 期:2023.5.12
    # 思 路:通过os.path模块中的walk方法遍历文件,然后输出即可
    
    import os
    
    
    ad = input("请输入文件夹路径:")
    
    def visited(path):
        if not os.path.isdir(path):
            print('错误:"', path, '"不是一个文件夹路径.')
    
        list_dirs = os.walk(path)          # 所有路径名,所有目录列表和文件信息
    
        flag1 = flag2 = True
        for root, dirs, files in list_dirs:     # 遍历该元组的目录,和文件信息
            for d in dirs:                      # 遍历目录
                if flag1 == True:
                    print("文件夹有:")
                    flag1 = False
                print(os.path.join(root, d))
            for f in files:                     # 遍历文件信息
                if flag2 == True:
                    print("文件有:")
                    flag2 = False
                print(os.path.join(root, f))
    
    visited(ad)
    
    
  2. 编写一个程序,要求用户输入一个文件夹路径和一个文件扩展名,程序需要找出该文件夹中所有该扩展名的文件,并将它们复制到新的文件夹中。

    代码块:
    # 程序名:test6.2
    # 功能:编写一个程序,要求用户输入一个文件夹路径和一个文件扩展名,程序需要找出该文件夹中所有该扩展名的文件,并将它们复制到新的文件夹中。
    
    # 日 期:2023.5.12
    # 思 路:递归遍历文件夹中的所有文件,然后对文件名分隔,并于shutil中的copy方法复制到新的文件夹中
    
    import os
    import os.path
    import shutil
    
    def seach_copy_File(Path, extension,aim_dir):
    
        list_ = []
        try:
            all_File = os.listdir(Path)
    
            print("该文件包含该扩展名的文件有:")
    
            for each_File in all_File:
    
                if os.path.isdir(Path + os.sep + each_File):
                # 递归遍历子文件夹
                    seach_copy_File(Path + os.sep + each_File,extension,aim_dir)
                # 对文件名根据.进行分隔,实现文件名,后缀名的分离
                elif each_File.split('.')[-1] == extension:
                    print(Path + os.sep + each_File)
                    list_.append(Path + os.sep + each_File)
        except:
            pass
        # 如果已经存在该文件夹,移除
        if os.path.exists(aim_dir):
            shutil.rmtree(aim_dir)
        # 如果不存在该文件夹,则创建,用于储存后续提取出来的文件
        if not os.path.exists(aim_dir):
            os.makedirs(aim_dir)
        # 将列表中的文件复制到新的文件夹
        for file in list_:
            shutil.copy(file, aim_dir)
    
    ad = input("请输入一个文件夹路径:")
    
    x = input('请输入文件扩展名:')
    
    aim_dir = input("请输入存放复制文件的地址:")
    
    seach_copy_File(ad, x, aim_dir)
    
  3. 编写一个程序,要求用户输入一个文件夹路径,程序需要递归地遍历该文件夹下的所有文件和子文件夹,并将所有文件的大小求和。

    代码块:
    # 程序名:test6.3
    # 功能:编写一个程序,要求用户输入一个文件夹路径,程序需要递归地遍历该文件夹下的所有文件和子文件夹,并将所有文件的大小求和。
    
    # 日 期:2023.5.12
    # 思 路:通过os模块中的listdir方法获取文件,然后利用os.path模块中的getsize计算文件大小
    
    import os
    import os.path
    
    
    def traversal_dir(Path):
        full_size = 0
        for each_File in os.listdir(Path):
            sub_Path = os.path.join(Path, each_File)
            if os.path.isfile(sub_Path):
            # 将文件大小相加
                full_size += os.path.getsize(sub_Path)
            # 如果是文件,则递归遍历文件然后将文件大小相加
            if os.path.isdir(sub_Path):
                full_size += traversal_dir(sub_Path)
    
        # 返回总文件大小
        return full_size
    
    ad = input("请输入文件夹路径:")
    
    x = traversal_dir(ad)
    
    print("总文件大小为:", x)
    
    
  4. 编写一个程序,要求用户输入一个文件夹路径和一个关键词,程序需要在该文件夹下的所有文件中查找该关键词,并返回包含该关键词的文件名。

    代码块:
    # 程序名:test6.4
    # 功能:编写一个程序,要求用户输入一个文件夹路径和一个关键词,程序需要在该文件夹下的所有文件中查找该关键词,并返回包含该关键词的文件名。
    
    # 日 期:2023.5.12
    # 思 路:利用os模块中的walk方法获取文件名,然后分隔并判断是否含有关键词,若含有输出即可
    
    import os
    import os.path
    
    def search_File(Path, key):
    
        res_list = []
        g = os.walk(Path)
    
        for i in g:
            path, dir_list, file_list = i          # 序列解包
    
        for each_File in file_list:
    
            # 分隔文件名
            if key in each_File.split('\\')[-1]:
    
            # 将文件名储存在列表中
                res_list.append(each_File)
    
        for i in res_list:
            print(i)
    
    ad = input("请输入文件夹路径:")
    
    key = input("请输入关键词:")
    
    print("包含该关键词的文件有:")
    
    search_File(ad, key)
    

五、实验小结

(包括问题和解决办法、心得体会、意见与建议等)

问题和解决方法:

  1. 问题一:在利用os模块中的walk()方法时,接受返回值出现问题。
    解决方法:通过一个for循环对返回值进行序列解包,依次接收根目录,文件夹,文件等值。
  2. 问题二:在使用os模块中的getsize()方法时,运行结果显示os不包含getsize()方法。
    解决方法:查询资料后,getsize()是os.path模块中的方法,使用时应该为os.path.getsize(path),改正后,程序正常运行。
  3. 问题三:递归遍历文件夹时,文件路径出现问题。
    解决方法:查询资料后,通过os.path.join()方法,更新路径即可,更正后程序正常运行。

心得体会:

  1. python中的with关键字可以避免文件未被关闭的情况,可以不用使用.close()方法。
  2. os和os.path模块中含有很多文件操作的方法,包括文件的移动,复制,删除,重命名,压缩和解压缩等。
    s.path.getsize(path),改正后,程序正常运行。
  3. 问题三:递归遍历文件夹时,文件路径出现问题。
    解决方法:查询资料后,通过os.path.join()方法,更新路径即可,更正后程序正常运行。

心得体会:

  1. python中的with关键字可以避免文件未被关闭的情况,可以不用使用.close()方法。
  2. os和os.path模块中含有很多文件操作的方法,包括文件的移动,复制,删除,重命名,压缩和解压缩等。
  3. 二进制文件无法直接读取和理解其内容,需要通过反序列化的方法进行读取。

标签:文件,Python,程序,文件夹,实验,File,path,os
From: https://blog.csdn.net/qq_72560062/article/details/143817733

相关文章

  • 20222406 2024-2025-1 《网络与系统攻防技术》实验五实验报告
    202224062024-2025-1《网络与系统攻防技术》实验五实验报告1.实验内容对网站进行DNS域名查询,包括注册人、IP地址等信息,还通过相关命令查询IP地址注册人及地理位置。尝试获取QQ好友IP地址并查询其地理位置。使用nmap对靶机环境扫描,获取靶机IP活跃状态、开......
  • 20222310 2024-2025-1 《网络与系统攻防技术》实验六实验报告
    一、实验内容学习掌握Metasploit工具的使用。下载靶机Metasploitable2,完成以下实验内容。1.前期渗透(1)主机发现(可用Aux中的arp_sweep,search一下就可以use)(2)端口扫描(可以直接用nmap,也可以用Aux中的portscan/tcp等)(3)扫描系统版本,漏洞等2.Vsftpd源码包后门漏洞(21端口)3.SambaMS-R......
  • 20222423 2024-2025-1 《网络与系统攻防技术》实验六实验报告
    1.实验内容1.1内容回顾总结总而言之这周都重点在于Metasploit工具的使用时间上,对其功能和使用流程有了深入了解,也越发感叹道魔高一尺,道高一丈,好多漏洞如今的操作系统或者软件都已经修复,通过msf针对漏洞实施变得越发困难(重点点名本周的msf测试作业,让我一天都没吃上饭,基本上时间......
  • # 20222403 2024-2025-1 《网络与系统攻防技术》实验六实验报告
    1.实验内容本实践目标是掌握metasploit的用法。指导书参考Rapid7官网的指导教程。https://docs.rapid7.com/metasploit/metasploitable-2-exploitability-guide/下载官方靶机Metasploitable2,完成下面实验内容。(1)前期渗透①主机发现(可用Aux中的arp_sweep,search一下就可以use)......
  • 20222323 2024-2025-1 《网络与系统攻防技术》实验六实验报告
    1.实验内容掌握metasploit的用法。下载官方靶机Metasploitable2,完成下面实验内容。(1)前期渗透①主机发现(可用Aux中的arp_sweep,search一下就可以use)②端口扫描:可以直接用nmap,也可以用Aux中的portscan/tcp等。③选做:也可以扫系统版本、漏洞等。(2)Vsftpd源码包后门漏洞(21端口)(3)S......
  • [Python学习日记-67] 封装
    [Python学习日记-67]封装简介如何隐藏类中的属性封装并不是单纯意义的隐藏封装与扩展性特性(property)简介        从封装本身的意思去理解,封装就好像是拿来一个麻袋,把小猫、小狗、小王八和小猪一起装进麻袋,然后把麻袋封上口子。照这种逻辑看,封装起来的麻袋相当......
  • Python Requests模块全面教程
    PythonRequests模块全面教程在现代软件开发中,网络请求是一个不可或缺的部分。无论是获取网页数据、调用API接口,还是进行数据交互,都会涉及到HTTP请求。Python的Requests模块是一个非常强大的库,能够让我们轻松地发送HTTP请求并处理响应。本文将详细介绍Requests模块的使用,包......
  • Python读写Excel的全面教程
    Python读写Excel的全面教程在数据分析和处理的过程中,Excel是一个非常常用的工具。Python作为一种强大的编程语言,提供了多种库来进行Excel文件的读写操作。本文将详细介绍如何使用Python读写Excel文件,涵盖常用的库、基本操作、实例讲解以及一些高级技巧。一、环境准备在开......
  • 20222306 2024-2025-1 《网络与系统攻防技术》实验五实验报告
    1.实验内容(1)从www.besti.edu.cn、baidu.com、sina.com.cn中选择一个DNS域名进行查询,获取如下信息:DNS注册人及联系方式该域名对应IP地址IP地址注册人及联系方式IP地址所在国家、城市和具体地理位置PS:使用whois、dig、nslookup、traceroute、以及各类在线和离线工具进行搜集......
  • 数据采集与融合技术实验四
    数据采集与融合技术作业四码云链接完整代码链接:gitte作业①:要求:▪熟练掌握Selenium查找HTML元素、爬取Ajax网页数据、等待HTML元素等内容。▪使用Selenium框架+MySQL数据库存储技术路线爬取“沪深A股”、“上证A股”、“深证A股”3个板块的股票数据......