• Python文件操作2-- 小案例


    一、将一个文件,复制到另外一个副本中

    步骤:
    1.打开旧文件,读出
    2.打开新文件,读入
    3.关闭两文件
    open(‘d.txt’,‘r’,encoding = ‘utf-8’)

    import os
    os.chdir('files') #进入当前目录下的files文件夹
    source_file = open('d.txt','r',encoding = 'utf-8') #以utf-8编码进行处理
    dst_file = open('d_bat.txt','a',encoding = 'utf-8') #保证两个文件的编码是一致的
    content = source_file.read()
    dst_file.write(content)
    source_file.close()
    dst_file.close()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    二、对大文件进行复制

    为了节省内存,每次复制只复制1024个字节

    import os
    os.chdir('files') #进入当前目录下的files文件夹
    source_file = open('d.txt','r',encoding = 'utf-8') 
    dst_file = open('d_bat.txt','a',encoding = 'utf-8') 
    #content = source_file.read() 全部复制出来,占的内存大
    #dst_file.write(content)
    while True:
    	content = source_file.read(1024) #每次只读1024个字节
    	if len(content) == 0:
    		break
    	dst_file.write(content)
    	
    source_file.close()
    dst_file.close()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    三、文件分类

    给定一批文件a.avi b.jpg c.jpg d.txt e.avi f.txt
    按照文件后缀名,划分到不同的文件夹中,例如a.avi与e.avi进入avi文件夹中。。
    步骤:
    0.获取所有的文件名称列表
    1.遍历所有文件(文件名称)
    2.分解出后缀名
    3.如果对应文件名存在,则移动进去。若不存在则创建该名称的目录

    文件名.rfind(‘.’)—从由查找.,返回找到的第一个.的索引值
    os.path.exists(extension) #查找是否存在extension

    import os
    import shutil
    
    #容错处理,如果路径不存在,直接退出运行
    path = 'files'
    if not  os.path.exists(path):
    	exit()
    
    os.chdir('files') #切换好到目标目录下
    file_list = os.listdir('./') #获取当前文件下的所有文件名称
    
    for file_name in file_list:
    	#print(file_name) 每写一步打印一下检查
    	index = file_name.rfind('.') #查找最后一个.的索引位置
    	
    	#容错处理,如果没查找到挑出此循环
    	if index == -1continue
    	#print(index)
    	extension = file_name[index:] #切片截取
    	#判断是否存在extension文件夹
    	if not os.path.exists(extension):
    		os.mkdir(extension)  #不存在即创建
    	shutil.move(file_name,extension)	#移动文件名file_name进入文件夹名extension
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    四、生成文件清单

    继续三,列出文件夹以及文件夹中的文件名称,即返回所有子文件夹以及子子文件
    步骤:
    1.列举出,当前给定的文件夹,下所有子文件与子文件夹。(例如listfiles函数实现)
    2.针对列举出的列表进行遍历
    3.判定,是否是目录,是—则再运行一下listfiles函数

    os.path.isdir(new_filename) – 判断new_filename是否是文件夹

    import os
    #file_list = os.listdir('files') 返回文件夹files下的子文件名称,但不会返回子子文件夹名称。即只有一级不能多级
    def listfiles(dir):
    	file_list = os.listdir(dir)
    	#print(file_list) 打印出来查看一下
    	for file_name in file_list:
    		new_filename = dir + '/'+file_name #需要拼接一下,改变路径
    		if os.path.isdir(new_filename)print(new_filename)
    			listfiles(new_filename)
    		else :
    			print('\t'+file_name) #针对文件名称,专门加一个缩进,与文件夹名区别开
    	print('') #对每一组下,加一个空行区分出来
    listfiles('files') #列出files文件夹下的所有子/子子文件夹与文件名称
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    最终输出:
    在这里插入图片描述

    五、将四输出结果写入文件

    根据四的代码进行修改,把原本要输出的,改为写入文件中

    import os
    #将函数为:将dir写入新文件
    def listfilesToTxt(dir,file):
    	file_list = os.listdir(dir)
    	for file_name in file_list:
    		new_filename = dir + '/'+file_name #需要拼接一下,改变路径
    		if os.path.isdir(new_filename)file.write(new_filename)
    			listfilesToTxt(new_filename,file)
    		else :
    			file.write('\t'+file_name+'\n')
    	#print('') #对每一组下,加一个空行区分出来
    	file.write('\n') #写入\n换行,,类似输出的print('')
    f = open('list.txt','a')
    listfilesToTxt('files',f)
    list.close()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
  • 相关阅读:
    BSV 上的私钥谜题
    【MATLAB第98期】基于MATLAB的MonteCarlo蒙特卡罗结合kriging克里金代理模型的全局敏感性分析模型(有目标函数)
    Faiss原理和使用总结
    用 JavaScript 编写枚举的最有效方法
    自然语言处理(NLP)—— 神经网络语言处理
    计算机毕业设计之java+javaweb的学生综合测评管理系统
    JAVA【设计模式】中介模式
    QDockWidget重新实现的事件处理
    SSM+MySQL+JSP教务管理系统设计与实现(附源码下载地址)
    从一条更新SQL的执行过程窥探InnoDB之REDOLOG
  • 原文地址:https://blog.csdn.net/Sun123234/article/details/126800205