> 文档中心 > Python打开文件、读取文件、写入文件+Python创建与删除目录

Python打开文件、读取文件、写入文件+Python创建与删除目录


  “ 文章通过18个实例,介绍理论并实例演示了Python中打开文件、读取文件、按字符读取文件、按行读取文件、覆盖写入文件、拼接写入文件的相关操作,并介绍Python中文件乱码的机理及解决办法,介绍了目录的建立、目录的删除、目录的列表遍历、目录的递归遍历系列操作,一文解决Python文件目录处理问题。”

PS:“ 深入了解文件目录操作顺序阅读,应用型选手请跳转文末总结。

  • 博主每篇文章的注释都是干货!每个代码段都有详细注释,一定要认真看注释!!!
  • 重要的事情说三遍:一定要看注释!!!一定要看注释!!!一定要看注释!!!

 辅助知识

  • 解决Python文件中文乱码的原因:

  • pycharm默认存储编码方式是utf-8

  • open()函数默认使用GBK编码打开,写入中文,open加参数:encoding='utf-8'

  • 中文乱码解决见下文演示实例8

  • r不会新建不存在的文件,w和a会新建(如果文件不存在)

  • rb、wb等带b,以二进制文件形式打开/读取,针对:二进制文件,图像、声音等


文件读取

  • 文件打开方式一:open('文件名', '方式选择'):

  • 文件关闭:close()

  • 以上两个函数要配合使用,使用open打开配合close关闭,否则会占用系统资源

  • 文件打开方式二:with open('文件名','方式选择') as 别名: (推荐)

  • 推荐第二种方式,因为第二种方式会自动关闭,不需要close语句辅助

  • 文件常见方式选择:

    • 'r':只读

    • 'w':只写

    • 'a+':读写

  • 在当前目录下新建文本文件,命名为:file.txt,文件内容如下:

hello thank youfilesOK
  • 实例1:读写性验证
f = open('file.txt', 'r')   # 以只读方式打开文件data.txt,标识为fprint(f.readable())     # readable()判断文件可读性print(f.writable())     # writable()判断文件可写性# 输出结果见下图

  

按字符读取 

  • 实例2:按字符读取,read('读取的字符个数'),空则默认全部读取
# 按字符读取# read('读取的字符个数'),空则默认全部读取f = open('file.txt', 'r')   # 以只读方式打开文件data.txt,标识为fa = f.read()print(a)f.close()# 输出结果见下图

 

f = open('file.txt', 'r')   b = f.read(5)   # 读的前5个字符print(b)f.close()# 输出结果见下图

 

  • 实例3:从指定位置开始读取,seek('指定数字')
f = open('file.txt', 'r')f.seek(6)   # 从第六位开始读文件,前5位为hello和空格c = f.read(5)   # 读的字符数是英文print(c)f.close()# 输出结果见下图

 

按行读取 

  • 实例4:每次读一行readline(),非特殊情况不推荐,新手学习可跳过
# 按行读取readline()# 每次读一行f = open('file.txt', 'r')data = f.readline()  # 读第一行存到d中while data:  # 当data不为空时程序执行,因为上句读了一行,所以此时不为空    print(data, end='')  # 打印文件内容,令end为空是因为print函数结尾默认会换行,会出现空行    data = f.readline()  # 继续读下一行存到d中    # 上述两行顺序不能错,否则会漏掉文件第一行,注意原因# 输出结果见下图

 

  • 实例5:readlines(),读取文件全部内容,按行读取读到结束
  • 每行以列表元素形式存储(推荐)
# 读取多行readlines(),读取全部内容# 数据以列表形式存储,每行都是一个列表元素f = open('file.txt', 'r')datas = f.readlines()  # 将读取的文件存在d中for i in datas:    print(i, end='')f.close()# 输出结果见下图

  • 推荐方式
  • 实例6:with open('文件名',读取方式) as 别名:
  • 不用写close()函数,自动关闭
# 系统自动关闭文件with open('file.txt', 'r') as f:    # 读取文件,标识为f    datas = f.readlines()    # 读取全部内容,保存在列表datas里    for i in datas:    # 遍历列表元素(每行),并打印 print(i, end='')# 输出结果见下图

  • 进阶实例7:Python读取配置文件并输出,新手可跳过
  • 当前目录下新建一个配置文件,命名为config.txt,文件内容如下:
# this is a config fileurl=www.baidu.comuser=adminpassword=123456
  • 读取配置文件
# 读取配置文件with open('config.txt', 'r') as f:    datas = f.readlines()    for i in datas: if i.startswith('#'):   # 如果遇到#开头的行则忽略,因为是注释     continue print(i)# 输出结果见下图

 

  • 调用配置文件参数,方法:保存为字典,调用字典元素
# 调用配置文件参数实例config_dict = {}    # 建立配置文件字典with open('config.txt', 'r') as f:    datas = f.readlines()    for i in datas: if i.startswith('#'):     continue key = i.split('=')[0] # value = i.split('=')[1].strip('\n')   # 删除换行符 value = i.split('=')[1].replace('\n', '')   # 将换行符替换为空,效果和上句相同 config_dict[key] = value    # 每次循环添加字典元素    # print(config_dict)    print('读取的url:', config_dict['url'])    # 调用字典元素    print('读取的user:', config_dict['user'])    print('读取的password:', config_dict['password'])    # 注意如果配置文件里=前后有空格    # 则相应config_dict['url ']也要加空格,或者设置操作删除空格    # 输出结果见下图

 


文件写入

  • with open('文件名','w') as 别名:

  • w:清空文件并写入

  • with open('文件名','a') as 别名:

  • a:不清空文件拼接写入

  • 文件的写入write('写入内容'),可以连续写入

  • 默认写入、读取的编码方式为GBK

  • 解决方法1:提前设置写入编码方式,写中文需要设置编码方式为utf-8写入,否则乱码

  • 解决方法2:指定编码方式打开文件即可

清空+一次单行写入

  • 实例8:write()清空并连续写入

# w:清空文件并写入# 文件的写入write('写入内容'),可以连续写入with open('new_file.txt', 'w', encoding='utf-8') as f:    # 原本如果没有new_file.txt,则会自动创建    data1 = '你好'    # 默认写入、读取的编码方式为GBK,解决方法1:提前设置写入编码方式,写中文需要设置编码方式为utf-8写入,否则乱码    # 解决方法2:指定编码方式打开文件即可    f.write(data1 + '\n')    # 连续写入    data2 = 'hi'    f.write(data2)# 新建文件内容见下图

 

清空+一次多行写入 

  •  实例9:write()一次性写入多行,列表存储每行元素+循环写入,ps:文末多一行空行(可删除)
# 文件一次性多行写入,列表存储每行元素+循环写入with open('new_file.txt', 'w') as f:    datas = ['happy', 'honey']    for data in datas: f.write(data + '\n')# 写入结果见下图

  

  • 实例10:write()一次性写入多行,列表存储元素+('连接符').join('列表元素')
# write()一次性写入多行,列表存储元素+('连接符').join('列表元素')with open('new_file.txt', 'w') as f:    datas = ['nice', 'ball']    # 实例10    # write()解决,使用join连接元素    f.write('\n'.join(datas))    # 使用\n连接中间元素# 写入结果见下图

 

  • 实例11:writeline()一次性写入多行,列表存储元素,自动连接
# writelines()解决,自动连接元素with open('new_file.txt', 'w') as f:    datas = ['nice', 'ball']    f.writelines(data+'\n' for data in datas)# 写入结果见下图

  

 拼接写入(不清空)

  • a:拼接写入

  • 实例12:建立在实例11的基础上,完成拼接写入

with open('new_file.txt', 'a') as f:    datas = ['good', 'luck']    f.writelines(data+'\n' for data in datas)# 写入结果见下图

 

文件删除

  • 需要使用os.path库,os.remove()
  • 建议先阅读实例13
  • 注意配合使用
# 删除文件import os.pathif os.path.exists('demo'):    # 判断文件路径是否存在    os.remove('demo')    # 删除# 配合使用,否则文件不存在会报错

目录基础

  • import os.path库
  • 判断文件/目录是否存在os.path.exists('文件名/目录名')
  • 实例13:
import os.pathprint(os.path.exists('file.txt'))# 输出结果见下图

 

目录创建(单级与多级)与删除(空与非空目录)

  • ​​​​​​os.getcwd()   # 获取当前目录

  • os.mkdir('demo')  # 创建单级目录demo,实例14

    • os.makedirs()  # 连续创建多级目录

  • os.rmdir('demo')  # 删除空目录demo,实例14

    • import shutil

    • shutil.rmtree('demo')  # 删除非空目录demo,谨慎使用此函数

  • 实例14:创建单级目录+删除空目录

if not os.path.exists('demo'):    os.mkdir('demo')else:    os.rmdir('demo')# 运行第一次在当前路径下创建目录:demo# 运行第二次删除当前路径下目录:demo
  • 实例15:创建多级目录,os.makedirs()  # 连续创建多级目录
  • 使用变量保存目录便于修改
# 连续创建多级目录dirpath = r'./dirs/dir'if not os.path.exists(dirpath):    os.makedirs(dirpath)

目录的遍历 

列表遍历

  • 遍历指定路径下内容,不区分文件和目录
  • os.listdir('要遍历的目录')
  • 实例16: 
# os.listdir('要遍历的目录')# 遍历指定目录下内容,此处以当前目录为例lis = os.listdir(os.getcwd())    # 设置目标为当前目录,os.getcwd()print(lis)# 输出结果见下图

 

递归遍历

  • os.walk('指定路径')
  • 对指定目录进行递归,遍历子目录和文件夹

  • 会输出指定路径下所有文件夹下所有文件位置

  • 区分文件和文件夹

  • 实例17:

  • 当前路径:

 

# os.walk('指定路径')# 对指定目录进行递归# 遍历子目录和文件夹# 会输出指定路径下所有文件夹下所有文件位置# 区分文件和文件夹for i in os.walk(os.getcwd()):    print(i)# 输出结果为元组,三个元素依次为:# 路径、文件夹、文件# 实例结果见下图

  • 实例18:使用序列解包+os.walk(),分类指定路径下的所有文件和文件夹
  • 当前路径:

  

# 序列解包,依次接收元组元素:路径、文件夹、文件for dirpath, subdirpath, files in os.walk(os.getcwd()):    for i in subdirpath:    # 如果是文件夹,输出目录 print('目录', os.path.join(dirpath, i))    for i in files:     # 如果是文件,输出文件 print('文件', os.path.join(dirpath, i))# 输出结果见下图

  


总结

  • 文件读取

f = open('文件名', '打开方式') # 打开文件f.close()# 关闭文件# 打开文件with open('文件名', '打开方式', encoding='编码方式') as f:   # 打开文件# 可读可写性判断f.readable()f.writable()f.read()    # 读取全部内容f.read(10)  # 读取前10个字符# 读取5-10个字符f.seek(5)f.read(10)# 读取第一行f.readline()# 按行读取全部行,每行为列表元素f.readlines()# 读取文件实例with open('file.txt', 'r') as f:    # 读取文件,标识为f    datas = f.readlines()    # 读取全部内容,保存在列表datas里    for i in datas:    # 遍历列表元素(每行),并打印 print(i, end='')
  • 文件写入与删除

with open('file.txt', 'w') as f:    # 拼接写入w改为a:f.write('写入内容')   # 清空写入单行f.writelines('写入列表')    # 清空写入多行# 实例# write()一次性写入多行,列表存储元素+('连接符').join('列表元素')with open('new_file.txt', 'w') as f:    datas = ['nice', 'ball']    # 实例10    # write()解决,使用join连接元素    f.write('\n'.join(datas))    # 使用\n连接中间元素# writelines()解决,自动连接元素with open('new_file.txt', 'w') as f:    datas = ['nice', 'ball']    f.writelines(data+'\n' for data in datas)# 文件删除if os.path.exists('demo'):    # 判断文件路径是否存在    os.remove('demo')    # 删除
  • 目录操作

# 目录操作os.path.exists('文件名/目录名')   # 存在性判断os.getcwd()     # 获取当前目录os.mkdir('demo') # 创建单级目录demoos.makedirs('./reports/report')     # 连续创建多级目录os.rmdir('demo')    # 删除空目录demoimport shutilshutil.rmtree('demo')   # 删除非空目录demo,谨慎使用此函数os.listdir('路径')    # 列表遍历目录os.walk('路径')   # 递归遍历目录# 实例:dic = 'demo'if not os.path.exists(dic):    os.mkdir(dic)

“以上为本文全部内容,如若遇到不明白的地方或者发现错误的地方欢迎私信博主交流、改正。”​​​​​​​


💗 “分享欲本身就是热情和爱,对于某些个体而言,分享欲亦是迸发的力量和刻进骨子里的浪漫。” 

                                                                ——Created By 是羽十八ya

Python打开文件、读取文件、写入文件+Python创建与删除目录 创作打卡挑战赛 Python打开文件、读取文件、写入文件+Python创建与删除目录 赢取流量/现金/CSDN周边激励大奖