python基础14_文件操作函数open()的使用

python的文件操作

python中文件操作的内置函数只有一个,在之前其实已经看到,现在来看看它的具体用法是怎么样的。

open()

语法:

open(path/files, mode=‘’, encoding=‘’)

文件操作时一般有两种用法

第一种:

open(path/files, mode=‘’, encoding='')  #打开文件
# 完成后,要记得关闭,所以后边还要跟随
.close()   # 关闭文件

第二种:

whit open(path/files, mode=‘’, encoding='') as 别名:
	文件操作
    ......
#这种方式在whit语句完成后,会自己关闭文件

使用open()函数打开文件,执行语句后,文件内容并没有被读取到内存中,而是处于一种待命状态。

如果把文件看做是一个封闭的空间,比如一间房屋,那么在我们执行open()打开文件后,相当于把这间房间的门打开,让封闭空间开一个口。

具体里边有什么内容,在没有后续操作时,是不知道的。

在这里插入图片描述
也可以理解为,通过Open建立了一条通往文件的通道,可以随时通过这条通道去对文件进行读写。

再来看看open()里的几个参数的功能:

  • path/files:文件名。要注意文件的位置,文件路径:

    一般使用相对路径:’…‘:表示上一级文件夹,'.'表示当前文件夹。不清楚的可以去看看文件路径的相关知识介绍。相同目录内可省略路径。

  • mode=‘’:表示打开文件的方式文件。

    • r:即read,以只读方式打开文件。
    • w:即write,以写入的方式打开文件。注意使用w参数,被打开的文件内容会被清除,如果文件不存在,则在所给路径目录内新建文件。
    • a:即append,以追加写入的方式打开文件。
  • encoding=’‘:文件的编码类型,一般打开文本文件时用’utf-8‘,其他非文本文件可以省略。

最后,python中对文件的操作流程大概是:

打开文件open
对文件操作
关闭文件close

文本文件的操作

读取文件内容

常用的有四个函数,分别是:

  • .read():把文件内容全部读取到内存里。大文件不适用。
  • .readable():判断是否可读,返回True和False。
  • .readline():读取一行文件的内容。
  • .readlines():读取全部内容,含隐藏符号‘\n’等,返回的是一个列表。

示例:读取文本文件。

准备文本文件"将进酒.txt",文件内容如下:

君不见,黄河之水天上来,奔流到海不复回。
君不见,高堂明镜悲白发,朝如青丝暮成雪。
人生得意须尽欢,莫使金樽空对月。
天生我材必有用,千金散尽还复来。
烹羊宰牛且为乐,会须一饮三百杯。
岑夫子,丹丘生,将进酒,杯莫停。
与君歌一曲,请君为我倾耳听。
钟鼓馔玉不足贵,但愿长醉不愿醒。
古来圣贤皆寂寞,惟有饮者留其名。
陈王昔时宴平乐,斗酒十千恣欢谑。
主人何为言少钱,径须沽取对君酌。
五花马,千金裘,呼儿将出换美酒,与尔同销万古愁。
.read()的使用:
files = open('将进酒.txt', mode= 'r', encoding= 'utf-8')
# 读取全部文本
print(files.read())   
files.close() # 文件操作完,关闭文件。
.readline()的使用
files = open('将进酒.txt', mode= 'r', encoding= 'utf-8')
for i in range(12):  # 有12行文字,所以循环打印12,每次读一行。连续打印会连续读行。
    line = files.readline().strip()
    print(line) # 加.strip()为了去除每行末的\n换行符
files.close()  

readline()的括号里是可以带一个整数的,默认为-1,好像是限制每行的字符数量。read()和readlines()也可以在括号里输入一个Int数值。

最常用的for循环读文件的方法

# 效果与上边一致。
files = open('将进酒.txt', mode= 'r', encoding= 'utf-8')
for line in files:
    line =line.strip()
    print(line)
files.close()
.readlines()的使用
# 读取全部,返回一个列表。可见到隐藏的\n换行符。
files = open('将进酒.txt', mode= 'r', encoding= 'utf-8')
print(files.readlines())
.readable()的使用
# 返回值为:True
files = open('将进酒.txt', mode= 'r', encoding= 'utf-8')
print(files.readable())
files.close()

把数据写到文件里

要把数据写到文件里,在打开文件是open()的mode = ‘w’,常用的就是write(‘写入的数据’)。

write():写入数据

需要注意的是:

  • 往文件里写入数据时,需要在打开文件时使用mode = 'w’模式。
  • 在mode = 'w’模式下,
    • 打开的文件如果不存在,则会创建新文件。
    • 如果文件存在,则会把原文件里的内容清空。

示例:把"将进酒.txt"的内容写到”古诗欣赏.txt"里

files1 = open('将进酒.txt', mode= 'r', encoding= 'utf-8')  # 这个是读
files2 = open('古诗欣赏.txt', mode= 'w', encoding= 'utf-8') # 这个是写,而且新建文件。
for i in files1:
 	 files2.write(i)
files1.close()
files2.close()

新建一个列表,把列表里的元素写到 ”古诗欣赏.txt“里

files2 = open('古诗欣赏.txt', mode= 'w', encoding= 'utf-8')  # 打开已有文件,则清空文件内容
gs_lb = ['将进酒', '静月思', '黄鹤楼送孟浩然', '蜀道难']
for i in gs_lb:
    files2.write(i)   # 把列表gs_ls里的元素写入打开的文件。
    files2.write('\n')  # 可以加个换行符换行,不然写入的时候是连续写成一行的。
files2.close()
追加写入数据

打开文件时使用 mode = ‘a’ 模式,这是即可在保留原文件内容的基础上,追加写入新数据。

示例:在上述"古诗欣赏.txt"文件里,在增加几首白居易的诗。

files2 = open('古诗欣赏.txt', mode= 'a', encoding= 'utf-8')  # 打开已有文件,则清空文件内容
gs_bjy = ['问刘十九', '长恨歌', '忆江南']
for i in gs_bjy:
    files2.write(i)   # 同样的write因为打开模式是'a',所以变成追加写入数据
    files2.write('\n')  
files2.close()   # 别忘记最后要关闭文件。

.write相关的也有诸如writeline、writelines等……

用whit open() as… : 语句形式做文件操作

使用的效果与直接用open()差不多,只是最后不需要在使用close()关闭文件。

  • whit的句式,会在文件操作完成后自己关闭文件
  • whit句式带’:',所以关于文件操作的语句类似for等语法,要注意缩进
  • 在whit句式中,如果指令太长,可以使用’\‘符号换行接续

示例:把前文一个示例修改为whit的句式

# 原代码指令如下:
files1 = open('将进酒.txt', mode= 'r', encoding= 'utf-8')  # 这个是读
files2 = open('将古诗欣赏.txt', mode= 'w', encoding= 'utf-8') # 这个是写,而且新建文件。
for i in files1:
 	 files2.write(i)
files1.close()
files2.close()

# 修改后的代码如下:
with open('将进酒.txt', mode= 'r', encoding= 'utf-8') as files1, \
    open('古诗欣赏.txt', mode= 'w', encoding= 'utf-8') as files2:
        for i in files1:
                files2.write(i)

非文本文件的操作

非文本文件的操作与文本文件操作类似,不同的地方在于:

  • 非文本文件在使用open()打开时,不需要encoding参数
  • 非文本文件在打开时打开的是字节数组,所以需要在mode = ‘r’ 或 ‘w’的后边加上小写字母‘b’:
    • 读取模式时:mode = ‘rb’
    • 写入模式时:mode = ‘wb’

文件的修改

之所以把这个问题列为一个单独的标题,主要是因为Python中是没办法直接对原文件进行修改保存的。

在做 文件的修改操作是,流程大概是这样:

打开原文件后,利用一个文件的副本,进行操作

原文件 副本 修改内容好的内容存入副本 删除原文件,修改文件名为原文件 原文件 副本

示例:

# 新建一个"菜名.txt"文件。
cm = ['蒸羊羔', '蒸熊掌', '烧花鸭', '腊肉', '蒸鹿尾儿', '烧雏鸡', '烧子鹅', '卤猪', '卤鸭', '酱鸡'] 
files = open('菜名.txt', mode= 'w', encoding= 'utf-8') # 这个是写,而且新建文件。
for i in cm:
    files.write(i)
    files.write('\n')
    print(i, ' ', end = '')  # 打印看看内容
files.close()
print()

# 把文件里的烧字改成烤字,写入“菜名_副本.txt”:
with open('菜名.txt', mode= 'r', encoding= 'utf-8') as f1, \
    open('菜名_副本.txt', mode= 'w', encoding= 'utf-8') as f2:
    for line in f1:
        line = line.strip()
        if line.startswith("烧"):  # 查找符合条件的菜名
            line = line.replace('烧', "烤")   # 修改菜名
        f2.write(line)  # 修改后的菜名写入副本
        f2.write('\n')  
        print(line, ' ', end = '')  # 打印看看内容

# 加载os模块,删除“菜名.txt”,修改“菜名_副本.txt”为“菜名.txt”。
import os
os.remove('菜名.txt')
os.rename('菜名_副本.txt', "菜名.txt")

运行结果:

蒸羊羔  蒸熊掌  烧花鸭  腊肉  蒸鹿尾儿  烧雏鸡  烧子鹅  卤猪  卤鸭  酱鸡  
蒸羊羔  蒸熊掌  烤花鸭  腊肉  蒸鹿尾儿  烤雏鸡  烤子鹅  卤猪  卤鸭  酱鸡

操作后,只剩下修改后的“菜名.txt”文件存在。

写在最后

通过上述内容,不难发现python中关于文件操作的内置函数只有Open一个,学习之后大概对Python中文件处理的流程和方式就会有一个清楚的认知。

如果要使用Python对文件更方便的操作,我们需要用到python的模块,其中有python的内置模块,也有第三方提供的模块,例如:os、shutil、openpyxl、docx等。

调用模块操作文件时,文件的路径和文件名都是以字符串的形式使用的。
而且如果你要把某个路径赋值给一个变量,我看到有些代码里会在字符串前加上一个小写的r
例如:

path = r"d:\python\"

第三方模块的几个命令:

pip list # 列出已有模块
pip show 模块名称 # 查看某个模块
pip install 模块名称  #下载安装模块

如果要对文件夹操作的话,也只能通过调用相关模块。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值