前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python中的文件操作

python中的文件操作

作者头像
Yui_
发布2024-10-16 08:57:46
780
发布2024-10-16 08:57:46
举报
文章被收录于专栏:Yui编程知识

1.函数

函数

2.列表与元组

列表与元组

3.字典

字典

4.文件

4.1 文件是什么

变量是把数据保存到内存中,如果程序重启/断电,内存中的数据就会丢失。 要想实现数据的持久化存储,就需要把数据存储,就可以把数据存储到硬盘中,也就是在文件中存储。 一些常见的文件类型:

代码语言:javascript
复制
文本文件 txt
可执行文件 exe class 
图片文件 jpg png
视频文件 mp4 mov
office文件 ppt docx

本文主要聚焦于文本文件。

4.2 文件路径

在系统中会存在特别多的文件,为了人让这些文件更加全面的被组织,往往会使用很多的文件夹,在Linux也叫目录。 实际上一个文件往往会进行许多的目录嵌套。为了方便确定一个文件的位置,使用文件路径来描述就很方便了。 以我存储python代码的路径为例D:\code\python

  • D:表示盘符,不区分大小写。
  • 每个\表示一级目录,当前的python就是放在D盘下的code目录下的。
  • 目录之间的分隔符,可以使用\也可以使用/一般在编写代码时使用/更方便。 绝对路径于相对路径:
  • 以盘符开头的路径,我们称为绝对路径。
  • 相对路径需要先指定一个基准目录,然后以基准目录位参照点,间接的找到目标文件。 在描述一个文件路径时,使用绝对路径还是相对路径都是可以的。

4.3 文件操作

要使用文件,主要通过文件来保存数据,并且在后续把保存数据调出来。为了读写文件,首先当然需要打开文件,在完成操作后在关闭文件。

4.3.1 打开文件

使用内建函数open打开文件。

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

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

代码语言:javascript
复制
f.close()

使用完毕的文件一定要记得关闭。 一个程序能同时打开的文件数是有限制的

代码语言:javascript
复制
flist = []
count = 0
while True:
	f = open('d:/tmp/test.txt','r')
	flist.append(f)
	count+=1
	print(f'count = {count}')
'''
...
count = 8187
count = 8188
count = 8189
Traceback (most recent call last):
  File "d:\code\python\python_test1\test.py", line 158, in <module>
OSError: [Errno 24] Too many open files: 'd:/tmp/test.txt'
'''

从代码上来看,大概一个程序是可以打开8000个文件。如果一种循环的打开文件,而不去关闭,就会出现上述问题。当一个程序打开的文件超过上限,就会抛出异常。

上述代码中,使用一个列表来保存所有文件对象,如果不进行保存,那么python内置的垃圾回收机制就会在文件销毁的时候自动关闭文件。 但是由于垃圾回收机制不一定及时,所以我们写代码时仍然需要手动回收,避免依赖于自动回收。

4.3.3 写文件

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

  • 写文件,要使用学方法打开,open第二个参数为w
  • 使用write方法写入文件。
代码语言:javascript
复制
f = open('d:/tmp/test.txt','w')
f.write('i am yui')
f.close()

打开test.txt发现已经写入。 如果在r方式下写入的话,程序会抛出异常。

使用w打开文件成功后,原有文件中的数据会清零。 使用a实现追加写,此时原有内容不变,写入的内容会存在于之前文件内容的末尾。

代码语言:javascript
复制
f = open('d:/tmp/test.txt','w')
f.write('i am yui')
f.close()

f = open('d:/tmp/test.txt','a')
f.write(',hello')
f.close()
  • 针对已经关闭的文件对象进行写入,程序会抛出异常。
4.3.4 读文件
  • 读文件内容需要使用r方式打开文件。
  • 使用read方法完成读操作,参数表示读取几个字符
代码语言:javascript
复制
f = open('d:/tmp/test.txt','r')
result = f.read(10)
print(result)
f.close()
'''
i am yui,h
'''
  • 如果文件是多行文本,可以使用for循环一次读取一行。 我们先构造一个多行的文本文件。
代码语言:javascript
复制
111111
222222
333333
444444

下面来打印这文件的内容。

代码语言:javascript
复制
f = open('d:/tmp/test.txt','r')
for line in f:
	print(f'line = {line}')
f.close()
'''
line = 111111

line = 222222

line = 333333

line = 444444

'''

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

代码语言:javascript
复制
print(f'line = {line}',end='')

可以取代print自带的换行符。

  • 使用readline直接把文件整个内容读取出来,返回一个列表,每个元素即为一行。
代码语言:javascript
复制
f = open('d:/tmp/test.txt','r')
lines = f.readlines()
print(lines)
f.close()
'''
['111111\n', '222222\n', '333333\n', '444444\n']
'''

4.4 关于中文的处理

当文件内容出现中文时,读取文件内容可能会出现错误。即出现乱码。 为什么会出现这种情况呢? 计算机表示中文的时候,会采取一定的编码方式,被称为字符集

所谓的“编码方式”,本质就是使用数字表示汉字。 众所周知,计算机只能表示二进制数据,要想表示英文字母或者汉字或者其他的文字字符,就就要通过编码。 最简单的字符编码ASCII,使用一个简单的整数就可以表示英文字母和数字,但是如果要表示汉字就需要更大的码表了。 目前常用的汉字编码方式主要是:GBK和UTF-8.

为此必须保证文件本身的编码方式,和python代码中读取文件使用的编码方式相一致,才能够避免出错。

python3默认打开文件的字符集跟随系统,而Windows简体中文版的字符集采用GBK,所以如果文件本身是GBK的编码,直接就能正确处理。如果不是的就会出错。

4.5 使用上下文管理器

打开文件后,最容易忘记的就是关闭。python提供了上下文管理器,来帮助我们自动关闭文件。

  • 使用with语句打开文件。
  • 当with内部的代码执行完毕后,就会自动调用关闭方法。
代码语言:javascript
复制
with open('d:/tmp/test.txt','r') as f:
	lines = f.readlines()
	print(lines)
'''
['111111\n', '222222\n', '333333\n', '444444\n']
'''
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-10-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.函数
  • 2.列表与元组
  • 3.字典
  • 4.文件
    • 4.1 文件是什么
      • 4.2 文件路径
        • 4.3 文件操作
          • 4.3.1 打开文件
          • 4.3.2 关闭文件
          • 4.3.3 写文件
          • 4.3.4 读文件
        • 4.4 关于中文的处理
          • 4.5 使用上下文管理器
          相关产品与服务
          数据保险箱
          数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档