Python---文件操作

专栏:python
个人主页:HaiFan.
专栏简介:本专栏主要更新一些python的基础知识,也会实现一些小游戏和通讯录,学时管理系统之类的,有兴趣的朋友可以关注一下。

文件操作

  • 思维导图
  • 前言
  • 文件是什么
  • 文件路径
  • 文件操作
    • 打开文件
    • 关闭文件
  • 写文件
  • 读文件
  • 上下文管理器


思维导图

Python---文件操作_第1张图片


前言

像已下载的歌曲,文本文件,图片等,这些数据都是保存在硬盘上的。像我们写的程序中,创建的变量,是在内存中的。

  1. 内存的空间更小,硬盘空间更大。
  2. 内存的访问更快,硬盘访问慢
  3. 内存成本更贵,硬盘成本便宜
  4. 内存的数据易丢失,硬盘的数据可以持久化存储

文件是什么

变量是把数据保存在内存中,如果程序重启,内存中的数据就会丢失,要是想让数据持久化存储,就可以把数据存储到硬盘中,也就是在文件中保存。

Python---文件操作_第2张图片
像C盘D盘,这里的内容都是硬盘上的内容,也都是文件。

通过文件的后缀名,可以看到文件的类型。

文本文件txt
可执行文件exe
图片文件jpg
视频文件mp4
office文件ppt
等等

文件路径

一个机器上,会存在很多文件,为了让这些文件更方便的被组织,往往会使用很多的文件夹(目录)来整理文件。
实际一个文件往往是放在一些列的目录结构之中的。
为了方便确定一个文件的所在位置,可以使用文件路径来描述。

如pycharm的路径

D:\python\PyCharm Community Edition 2022.3.1

  1. D:表示盘符,不区分大小写
  2. 每一个\表示一级目录
  3. 目录之间的分隔符,可以使用\也可以使用/

盘符开头的路径,称为绝对路径
除了绝对路径之外,还有相对路径,相对路径需要先指定一个基准目录,然后以基准目录为参照点,简洁的找到目标文件。

文件操作

要使用文件,主要是通过文件来保存数据,并且在后续把保存的数据读取出来,但是要像读写文件,需要先打开文件,读写完之后还要关闭文件

打开文件

使用内建函数open打开一个文件

open('d:/FileOperator/python.txt','r')
  1. 第一个参数 是一个字符串,表示要打开的文件的路径
  2. 第二个参数是一个字符串,表示打开方式,其中r(read)表示按照读方式打开,w(write)表示按照写方式打开,a(append)表示追加写方式打开,在原内容的末尾追加。
  3. 如果打开文件失败,就会抛出异常
  4. 返回值是文件对象(文件的内容是在硬盘上的,此处的文件对象是内存上的一个变量,后续的读写文件操作,都是拿着这个文件对象来进行操作的)
f = open('d:/FileOperator/python.txt','r')

Python---文件操作_第3张图片

关闭文件

使用close方法来关闭已经打开的文件

f.close()

使用完文件一定要记得及时关闭文件。

打开文件,其实是在申请一定的系统资源,不再使用的时候,资源就应该即使释放。
否则就可能会造成文件资源泄露,进一步倒是其他部分的代码无法顺利打开文件了。
正是因为一个系统的资源是有限的,因此一个程序能打开的文件个数,也是有限的。

flist = []
cnt = 0
while True:
    f = open('d:/FileOperator/python.txt', 'r')
    flist.append(f)
    cnt += 1
    print(f'cnt = {cnt}')

在这里插入图片描述
只打开不关闭,系统资源再多,也有借完的时候。
在这里插入图片描述
文件打开了8189次,当然,在系统中,是可以通过一些设置项,来配置打开文件的最大数目。但无论配置的是多少,都应该及时的关闭文件。


每个程序在启动时,都会默认打开三个文件

  1. 标准输入 键盘 input
  2. 标准输出 显示器 print
  3. 标准错误 显示器

写文件

文件打开之后,就可以写文件了。

  1. 写文件要先打开文件,open第二个参数设为w
  2. 使用write方法写入文件
f = open('d:/FileOperator/python.txt', 'w')
f.write("新年快乐")
f.close()
print(f'文件写入成功')

Python---文件操作_第4张图片
此时在打开文件。
Python---文件操作_第5张图片
就可以看到刚刚写入文件的内容.


如果是使用r方式打开文件,则写入时会抛出异常

f = open('d:/FileOperator/python.txt', 'r')
f.write("新年快乐1")
f.close()

Python---文件操作_第6张图片


使用w打开文件成功,就会情况文件原有的数据
使用a实现追加内容,此时原有的内容不会改变,写入的数据会存在于原有的内容的末尾

现在文件中的内容是

Python---文件操作_第7张图片

f = open('d:/FileOperator/python.txt', 'w')
f.write("新年快乐,新年快乐")
f.close()

Python---文件操作_第8张图片
可以看到源文件内容被清空了。

f = open('d:/FileOperator/python.txt', 'a')
f.write("hello world 新年快乐,新年快乐")
f.close()

Python---文件操作_第9张图片
使用a方式写入文件,可以看到,是在文件内容末尾追加的数据。

读文件

读文件内容需要使用r的方式打开文件
使用read方法完成读操作,参数表示读取几个字符

Python---文件操作_第10张图片
此时文件里是没有内容的,先读入数据。

f = open('d:/FileOperator/python.txt', 'w')


ch : int = 97

for i in range(0,26):
    f.write(chr(i + ch))

f.close()

Python---文件操作_第11张图片
可以看出,我们往文件里多了了26个字母。
接下来把文件里的内容,输出到屏幕上。

f = open('d:/FileOperator/python.txt', 'r')

fstr = f.read(26)
print(fstr)

Python---文件操作_第12张图片


如果文本是多行,可以用for循环一次读取一行。

Python---文件操作_第13张图片
把数据写到文件里面。

f = open('d:/FileOperator/python.txt', 'r')

fstr = f.read(2)
print(fstr)

在这里插入图片描述
当文件中的内容存在中文的时候,读取文件内容不一定顺利。

所谓编码方式,本质上就是使用数字表示汉字,我们知道,计算机只能表示二进制数据,要想表示英文字母,或者汉字,或者其他的符号,都要通过编码,最简单的字符编码就是ascii,使用一个简单的整数就可以表示英文字母和阿拉伯数字,但是要想表示汉字,就需要一个更大的码表,一般常用的汉字编码方式主要是:GBK和UTF-8
必须要保证文章本身的编码方式和python代码中读取文件使用的编码方式匹配,才能避免出现上述问题。
Python3 中默认打开文件的字符集跟随系统, 而Windows 简体中文版的字符集采用了 GBK, 所以如果文件本身是 GBK 的编码, 直接就能正确处理.如果文件本身是其他编码(比如 UTF-8), 那么直接打开就可能出现上述问题。

点击记事本,点击文件,点击另存为,在窗口中可以看到当前文件的编码方式。
在这里插入图片描述
如果此处的编码为ANSI,则表示GBK编码
如果此处为UTF-8,则表示UTF-8编码。

此时修改打开文件的代码,给open方法加上encoding参数,显示的指定为和文本相同的字符集,问题即可解决

f = open('d:/FileOperator/python.txt', 'r',encoding = 'UTF-8')

fstr = f.read(2)
print(fstr)

Python---文件操作_第14张图片
此时就会显示文件中的内容。

f = open('d:/FileOperator/python.txt', 'r',encoding = 'UTF-8')

for line in f:
    print(line)

f.close()

Python---文件操作_第15张图片
这里为什么会有换行呢?
因为print自带换行,并且文件行末也自带换行,所以会多出一个换行。

可以给print在设定个参数,修改print自动添加换行的行为。

f = open('d:/FileOperator/python.txt', 'r',encoding = 'UTF-8')

for line in f:
    print(line,end='')

f.close()

Python---文件操作_第16张图片

end参数表示每次打印之后要在末尾加个什么,默认是换行

使用readlines直接把整个文件内容读取出来,返回一个列表,每个元素即为一行

f = open('d:/FileOperator/python.txt', 'r',encoding = 'UTF-8')

print(f.readlines())

f.close()

Python---文件操作_第17张图片

\n就是换行符

上下文管理器

打开文件之后,容易忘记关闭文件,Python’中提供了上下文管理器,来帮助程序猿自动关闭文件。

  • 使用with语句打开文件
  • with内部的代码执行完毕之后,就会自动调用关闭的方法
def function():
    f = open('D:/FileOperator/python.txt','r',encoding='UTF-8')
    #代码
    #代码
    #代码
    #代码
    #代码
    #代码
    #代码

当你做一些项目的时候,一个函数中,代码过的多的话,可能会忘记写关闭文件的操作。

def function():
    with  open('D:/FileOperator/python.txt','w',encoding='UTF-8') as f:
        #进行一些与文件有关的代码
        f.write("好好学习")
        if True:
            return
 with  open('D:/FileOperator/python.txt','w',encoding='UTF-8') as f:

这里是with语句里f的效果与
f = open('d:/FileOperator/python.txt', 'r',encoding = 'UTF-8')里的f`的效果是一样的。

最后有一个代表着又是一个代码块。当with所对应的代码块结束的时候,就会自动执行关闭文件的操作。

你可能感兴趣的:(python,python,pycharm,开发语言)