Python笔记——文件

一、文件
1.什么是文件

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

常见的文件的类型如下:

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

 一个计算机上往往含有很多文件,为了方便,会使用很多的“文件夹”(也叫目录)一层层地来整理文件,一个文件往往是放在一系列的目录结构中的,我们用 文件路径 来描述一个文件的位置

比如:D:\lingling-code

  • D:表示盘符,不区分大小写
  • 每一个 表示一级目录,上面这个文件就是放在D盘下的lingling-code目录下的
  • 目录之间的分隔符可用 \ 也可用 /

盘符 开头的路径称为 绝对路径 

相对路径:需要先指定一个基准目录,然后以基准目录为参照点,间接的找到目录文件

3.文件操作
(1)打开文件
  • 使用内建函数 open() 打开文件
f=open('d:/test.txt','r')

第一个参数是字符串,表示要打开的文件路径

第二个参数是一个字符串,表示打开方式

  • r:按照 方式 打开
  • w:按照 方式 打开
  • a:表示 追加写方式 打开

如果文件打开成功,返回一个 文件对象。后续的读写操作都是围绕它展开的。

如果打开失败(如指定的文件不存在),就会抛出异常 

(2)关闭文件
  • 使用 close() 方法关闭已经打开的文件
f.close()

文件使用完毕后要及时关闭!

  • 一个程序能同时打开的文件个数,是存在上限的
flist=[]
count=0
while True:
    f=open('d:/test.txt','w')
    flist.append(f)
    count+=1
    print(f'count={count}')

当一个程序打开的文件数量过大时,就会抛出异常

上述代码中 , 使用一个列表来保存了所有的文件对象 . 如果不进行保存 , 那么 Python 内置的垃 圾回收机制 , 会在文件对象销毁的时候自动关闭文件,但这个可能没那么及时,所以仍需手动关闭
(3)读文件  
  • 打开方式为 ‘r’, 使用 read()方法 读取文件,参数表示 读取几个字符
f=open('d:/test.txt','r')
result=f.read(5)
print(result)
f.close()
  • 如果文件是多行文本,可以使用 for循环 一次读取一行
f=open("D:/test.txt",'w')
f.write('床前明月光\n')
f.write('疑是地上霜\n')
f.write('举头望明月\n')
f.write("低头思故乡\n")
f.close()
f=open('D:/test.txt','r')
for line in f:
    print(f'line={line}')
f.close()

由于文件里每一行末尾都带有换行符,print打印一行的时候又会默认加上一个换行符,所以打印结果之间看起来存在空行。 

但是我们可以通过下面的操作手动把换行符去掉

print(f'line={line}',end="")  #加 end=""

  • 使用 readlines()方法 直接把文件整个内容读取出来 ,返回一个列表。每个元素即为一行
f=open("D:/test.txt",'r')
lines=f.readlines()
print(lines)
f.close()

(4)写文件
  • 打开方式为“w”,使用 write()方法 写入文件
f=open("D:/test.txt",'w')
f.write('床前明月光\n')
f.close()

打开记事本就能看到写入的内容!

 

如果用“r”方式打开,写入时会抛出异常;

如果在文件关闭后再写入也会抛出异常。

  •  使用 “w” 一旦打开文件成功,就会清空文件原有的数据
  • 使用 “a” 实现 “追加写”,此时原有内容不变,写入的内容会存在于之前文件内容的尾部
f=open("D:/test.txt",'w')
f.write('床前明月光\n')
f.write('疑是地上霜\n')
f.write('举头望明月\n')
f.close()
f=open('D:/test.txt','r')
result=f.read(5)
print(result)
f.close()
f=open("D:/test.txt",'w')  #第二次写入的方式为 写方式 “w”
f.write("低头思故乡\n")
f.close()
f=open('D:/test.txt','r')
result=f.read(5)
print(result)
f.close()
f=open("D:/test.txt",'w')
f.write('床前明月光\n')
f.write('疑是地上霜\n')
f.write('举头望明月\n')
f.close()
f=open('D:/test.txt','r')
result=f.read(5)
print(result)
f.close()
f=open("D:/test.txt",'a')  #第二次写入方式为 追加写方式 “a“
f.write("低头思故乡\n")
f.close()
f=open('D:/test.txt','r')
result=f.read(5)
print(result)
f.close()

 

观察两段代码和最后的结果,区别在于第二次写入的方式 :

第一个采用 ‘w’方式 写入,当第二次读取文件时,获得的是第二次写入的内容,说明前面的内容被清空了

第二个采用 ‘a’方式 写入,当第二次读取文件时,获得的仍是第一次写入的内容,说明前面的内容没有被清空

4.关于中文的处理

当文件中存在中文时,读取时可能会存在异常。

计算机表示中文的时候,会采取一定的编码方式,我们称为 字符集,本质上就是用数字表示中文

  • 一般常用的汉字编码方式,主要是 GBKUTF-8
必须要保证文件本身的编码方式 , Python 代码中读取文件使用的编码方式匹配 , 才能避免出现异常
        Python3 中默认打开文件的字符集跟随系统 , Windows 简体中文版的字符集采用了 GBK, 所以如果文件本身是 GBK 的编码 , 直接就能正确处理 .
       如果文件本身是其他编码 ( 比如 UTF-8), 那么直接打开就可能出现上述问题
使用记事本打开文本文件 , " 菜单栏 " -> " 文件 " -> " 另存为" 窗口中 , 可以看到当前文件的编码方式
  • 如果此处的编码为 ANSI , 则表示 GBK 编码.
  • 如果此处为 UTF-8 , 则表示 UTF-8 编码.

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

f = open('d:/test.txt', 'r', encoding='utf8')
5.使用上下文管理器

Python提供了 上下文管理器 来帮助我们自动关闭文件

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值