Python基础系列-文件

 个人主页: 会编程的果子君
个人格言:“成为自己未来的主人~” 

 

目录

 文件是什么

文件路径

文件操作

打开文件

关闭文件

写文件

读文件

关于中文的处理

使用上下文管理器


 文件是什么

变量是把数据保存到内存中,如果把程序重启/主机重启,内存中的数据就会丢失。

要想能让数据被持久化存储,就可以把数据存储到硬盘中,也就是在文件中保存。

在windows“此电脑”中,看到的内容都是文件,

通过文件的后缀名,可以看到文件的类型,常见的文件类型如下:

  • 文本文件(txt)
  • 可执行文件(exe.dll)
  • 图片文件(jpg.gif)
  • 视频文件(mp4.mov)
  • office文件(ppt.docx)

我们主要研究的是最简单的文本文件

文件路径

一个机器上,会存在很多文件,为了让这些文件更方便的被组织,往往会使用很多的文件夹(也叫做目录)来整理文件。

实际一个文件往往是放在一系列的目录结构之中的

为了方便确定一个文件所在的位置,使用文件路径来进行描述。

Python基础系列-文件_第1张图片

 例如,在我D盘中的这个文件,描述这个文件的位置,就可以使用路径 D:\CloudMusic\cloudmusic.exe来表示

  • D:表示盘符,不区分大小写
  • 每一个\表示一级目录,当前cloudmusic.exe就是放在D盘下的CloudMusic目录下的
  • 目录之间的分隔符,可以使用\,也可以使用/,一般在编写代码的时候使用/更方便

上述以盘符开头的路径,我们也称为绝对路径

除了绝对路径以外,还有一种常见的表示方法是相对路径,相对路径需要先指定一个基准目录,然后以基准目录为参照点,间接的找到目标文件

描述一个文件的位置,使用绝对路径和相对路径都是可以的,对于新手来说,使用绝对路径更好理解,也不容易出错。

文件操作

要使用文件,主要是通过文件来保存数据,并且在后续把保存的数据读取出来

但是要想读写文件,需要先“打开文件”,读写完毕之后还要“关闭文件”

打开文件

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

f=open('d:/test.txt','r')
  • 第一个参数是一个字符串,表示要打开的文件路径
  • 第二个参数是一个字符串,表示打开方式,其中r表示按照读方式打开,w表示按照写方式打开,a表示追加写方式打开
  • 如果打开文件成功,返回一个文件对象,后续的读写文件操作都是围绕这个文件对象展开
  •  如果打开文件失败(比如路径指定的文件不存在),就会抛出异常

关闭文件

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

f.close()

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

一个程序能同时打开的文件个数,是存在上限的

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

 

如上面的代码所示,如果一直循环的打开文件,而不去关闭的话,就会出现上述报错

当一个程序打开的文件个数超过上限,就会抛出异常

注意:上述代码中,使用一个列表来保存了所有的文件对象,如果不进行保存,那么Python内置的垃圾回收机制,会在文件对象销毁的时候自动关闭文件

但是由于垃圾回收机制不一定及时,所以我们写代码仍然要考虑手动关闭,尽量避免依赖自动关闭

写文件

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

  • 写文件,要使用写方式打开,open第二个参数设为‘w’
  • 要使用write方法写入文件
f=open('d:/test.txt','w')
f.write('hello')
f.close()

用记事本打开文件,即可看到文件修改后的内容

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

f=open('d:/test.txt','r')
f.write('hello')
f.close()

 

  •  使用‘w’一旦打开文件成功,就会清空文件原有的数据
  • 使用‘a’实现“追加写”,此时原有内容不变,写入的内容会存在于之间的文件内
f=open('d:/test.txt','a')
f.write('world')
f.close()

针对已经关闭的文件对象进行写操作,也会抛出异常

f=open('d:/test.txt','w')
f.write('hello')
f.close()
f.write('world')

 

读文件

  • 读文件内容需要使用‘r’的方式打开文件

  • 使用read方法完成读操作,参数表示“读取几个字符”

f=open('d:/test.txt','r')
result=f.read(2)
print(result)
f.close()

 

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


f=open('d:/test.txt','r',encoding='UTF-8')
for line in f:
    print(f'line={line}',end=' ')
f.close()

 Python基础系列-文件_第2张图片

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

f=open('d:/test.txt','r',encoding='UTF-8')
lines=f.readlines()
print(lines)
f.close()

 

关于中文的处理

当文件内容存在中文的时候,读取文件内容不一定就顺利

同样上述代码,有的同学执行时可能就会出现异常

计算机表示中文的时候,会采取一定的编码方式,我们称为字符集

所谓“编码方式 ”,本质上就是使用数字表示汉字

我们知道,计算机只能表示二进制数据,要想表示英文字母,或者汉字,或者其他文字符号,就要通过编码

最简单的字符编码就是ascll,使用一个简单的整数就可以表示英文字母和阿拉伯数字,但是要想表示汉字,就需要一个更大的码表

一般的汉字编码方式,主要是GBK和UTF-8

必须要保证文件本身的编码方式,和Python代码中读取文件使用的编码方式进行匹配,才能避免上述问题。

Python3中默认打开文件的字符集跟随系统,而Windows简体中文的字符集采用了GBK,如果文件本身是GBK的编码,直接就能正确处理

如果文件本身是其他编码(比如UTF-8),那么直接打开就可能出现上述问题

使用记事本打开文本内容,可以看到当前的文件的编码方式

  • 如果此处的编码为ANSI,则表示GBK编码
  • 如果此处为UTF-8,则表示UTF-8编码

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

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

字符编码问题,是编程中一类比较常见的,有比较棘手的问题,需要对于字符 有一定的理解,才能够从容应对

使用上下文管理器

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

  • 使用with语句打开文件
  • 当with内部的代码块执行完毕后,就会自动调用关闭方法
with open('d:/test.txt','r',encoding='UTF-8')as f:
    lines=f.readlines()
    print(lines)

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