python之 文件读写,博主认为已经很详细了。。。

初步了解

⽂件(file) 通过Python程序来对计算机中的各种⽂件进⾏增删改查的操作,⽂件也叫I/O(Input/Output)
一般⽂件的操作步骤 :

  • 1.打开⽂件
    2.对⽂件进⾏各种操作(读、写)然后保存
    3.关闭⽂件

⽂件会有⼀个返回值。返回⼀个对象,这个对象就表示的是当前的⽂件
在python中操作方式也基本类似,但是不需要特意保存,只需打开文件进行各种操作后关闭文件即可

一般打开文件与关闭文件

open,open英文意思是打开的意思,在python中它可以用来打开文件
例如我们在当前目录下创建了123.txt,然后在python中进行对它的操作:

# 用file代表123.txt,也可以不用file直接open('123.txt')
file = '123.txt'
# 用f接收文件文件返回值
f = open(file)
# 打印文件返回值看看
print(f)
<_io.TextIOWrapper name='123.txt' mode='r' encoding='cp936'>

我们发现初步打开已经成功实现了

但是上面我们标记了当前目录下,如果这个文件没有创建或者不在当前目录下会如何呢?

我们将123.txt删除和放在其它目录下分别再用上面的代码再次运行

FileNotFoundError: [Errno 2] No such file or directory: '123.txt'

我们发现报错了,错误原因找不到此文件,那么该如何做呢?

没有创建文件那当然就创建一个文件来进行操作,而文件不在此目录下那就添加目录路径

例如博主把123.txt文件放到了D盘的新建文件夹下,于是文件位置即D:\新建文件夹\123.txt

扫描二维码关注公众号,回复: 11542477 查看本文章

不知道博主r’'的用法意义的可以参考
https://blog.csdn.net/xdc1812547560/article/details/107193496

# 用file代表123.txt,也可以不用file直接open('123.txt')
file = r'D:\新建文件夹\123.txt'
# 用f接收文件文件返回值
f = open(file)
# 打印文件返回值看看
print(f)

文件又能正常打开了

<_io.TextIOWrapper name='D:\\新建文件夹\\123.txt' mode='r' encoding='cp936'>

既然打开那么就要关闭,不关闭文件的话虽然不会出现异常,但是也会占用一部分内存,如果内存占
用过多就会造成内存溢出,极大影响我们的电脑性能和操作

所以打开文件也要关闭文件

close在英文中是关闭的意思,而python中进行相应的关闭文件操作也是使用close

继续以123.txt文件为例:

# 用file代表123.txt,也可以不用file直接open('123.txt')
file = r'D:\新建文件夹\123.txt'
# 用f接收文件文件返回值
f = open(file)
# 打印文件返回值看看
print(f)
# 关闭文件
f.close()

虽然我们的代码操作对文件打开关闭没有什么感觉,但是实际上在内存中的确进行了打开与关闭的操作

with open() as

但是我们又发现了一个问题,这样我们感觉很麻烦,打开,关闭,很多时候都会忽略忘记关闭文件,那么如何做呢?

with open() as 文件别名:
    代码块

使用with open则不需要关闭,因为with open自带关闭,而as我们在模块那里就知道,可以设置别名
例如:

# file代表123.txt文件
file = r'D:\新建文件夹\123.txt'
# 打开文件123.txt别名f
with open(file) as f:
    print(f)
<_io.TextIOWrapper name='D:\\新建文件夹\\123.txt' mode='r' encoding='cp936'>

文件正常打开且不需要用close关闭

读写

刚刚打开的文件的返回对象我们可以看到三个主要内容,name = ‘xxx’,mode = ‘xxx’,encoding = ‘xxx’
在这里插入图片描述
分别代表什么意思呢?

第一个name我们当然可以看的出来代表的是123.txt

那mode后面代表的什么呢,r代表只读,也就是操作类型,encoding是编码,cp9361是其中一种编码表

刚刚我们一直在说打开文件与关闭文件,现在来讲讲如何读写文件

文件读取

如果文件123.txt是空白文件我们就看不到效果,于是我们加了些内容:
hello world
hello python
welcome come my blogs

用read方法读取

# file代表123.txt文件
file = r'D:\新建文件夹\123.txt'
# 打开文件123.txt别名f
with open(file) as f:
    # 用r接收文件读取内容
    r = f.read()
    print(r)
hello world
hello python
welcome come my blogs

我们看到已经能够成功读取文件中的内容了

编码

刚刚上面说了r是只读,那么编码呢?
如果对编码概念不熟悉,可以参考:
https://blog.csdn.net/xdc1812547560/article/details/107073328
以下是常用的编码表
在这里插入图片描述
调⽤open()来打开⼀个⽂件,可以将⽂件分为两种类型

  • ⼀种 纯⽂本⽂件(使⽤utf-8编码编写的⽂件)
  • ⼀种 ⼆进制⽂件(图⽚ mp3 视频…) open()打开⽂件时,默认是以⽂本⽂件的形式打开的 open()默认的编码 为None。所以处理⽂本⽂件时要指定编码

在上面代码打开的文件对象中默认的编码表我们发现是cp936,但是这是因为博主的电脑有些配置,所以默认cp936,但是很多人默认的编码表是ASCⅡ编码表,我们发现这个编码表并不支持中文,那么如果我们文件中使用中文会怎么样呢?

我们再次编辑文件123.txt中的内容,内容如下:
文件123.txt内容

UnicodeDecodeError:

文件会出现异常,那么这时候我们就知道问题所在了吧,encoding

# file代表123.txt文件
file = r'D:\新建文件夹\123.txt'
# 打开文件123.txt别名f
with open(file,encoding='cp936') as f:
    # 用r接收文件读取内容
    r = f.read()
    print(r)

在这里博主用的cp936,不过最常用的是utf-8,万国码,当然可以参考上面的编码表来根据实际情况选择编码表

hello world
hello python
welcome come my blogs
你好,世界
你好,python
欢迎来的我的博客

文件读取又成功运行

较大文件读取

参考:https://blog.csdn.net/xdc1812547560/article/details/107866953

文件写入

刚刚我们说了mode是操作类型,默认的是r,只读,那么如果我们写入和修改的话如何做呢?
write()来向⽂件中写⼊内容

  • 该⽅法可以分多次向⽂件写⼊内容
  • 写⼊完成之后该⽅法会返回写⼊的字符的个数
# file代表123.txt文件
file = r'D:\新建文件夹\123.txt'
# 打开文件123.txt别名f
with open(file,'w',encoding='cp936') as f:
    f.write('成功写入')

我们打开文件,发现文件中成功写入
在这里插入图片描述
我们之前是读取文件,所以如果没有这个文件的存在则会报错,但是写入时就不一样了,如下

# file代表123.txt文件
file = '234.txt'
# 打开文件123.txt别名f
with open(file,'w',encoding='cp936') as f:
    f.write('成功写入')

在这里插入图片描述
在我们用一个没有创建过的文件名使用写入时,我们发现当前目录下自动创建一个文件,如果想指定路径则添加路径,如上面读取时操作,这里就不演示了

但是我们还是发现有问题,比如写入后发现原文件内容会被覆盖,不复存在,那其实还是类型问题,下面这张表格列出来常用的操作类型方式,选择哪种看实际情况而论了,这里就不再演示

不过注意,编码问题,写入编码与读取编码不一致时会出现乱码
在这里插入图片描述

分行写入

参考:https://blog.csdn.net/xdc1812547560/article/details/107866953

猜你喜欢

转载自blog.csdn.net/xdc1812547560/article/details/107860396
今日推荐