欢迎关注公众号:python数据科学家

【要点抢先看】

1.文件操作模式,他的本质是字符串
2.文件的读方法和文件迭代器逐行扫描
3.文件的关闭与刷新
4.二进制文件的读写与对象的文件存储

前面几集里,我们详细介绍了python字符串以及编解码的有关内容,这些内容实质上也是文件操作的基础。今天这一集,我们就正好来说说文件操作。

先预热一下,看一个利用open函数打开文件的简单例子:

myfile = open('myfile.txt','w')myfile = open('myfile.txt','r')复制代码

【妹子说】文件读写应该有很多种模式,比如只读、可读可写等等,应该如何实现?

我们可以看出,利用内置函数open进行文件操作时,第一个参数是文件名,第二个参数是处理模式。典型的使用模式参数有:r为以只读模式打开文件,w为输出模式打开文件,a代表在文件尾部追加内容而打开文件,模式字符串尾部加上b可以进行二进制数据处理。

内置open函数会创建一个python文件对象,作为文件操作的接口。

我们需要牢记一点:文件的内容是字符串。从文件读取的数据经过函数返回时是一个字符串,如果字符串不是你所需的,比如你其实需要的是一个浮点数,你就需要将字符串转换为浮点数类型,而把数据写入文件时,也必须传递一个已经格式化的字符串给write方法。

【妹子说】那还是老套路,举几个实际的例子看看:

OK,我们来看看实际使用文件的例子:我们在文件中写入两行字符串(包含了换行),然后利用几种不同的方法将其读出,首先写入数据:

myfile = open('myfile.txt','w')myfile.write('hello text file\n')myfile.write('goodbyt text file\n')myfile.close()复制代码

首先使用的是readline方法,一次手动读取一行,最后一次返回一个空字符串,意味着已经到达了文件底部

myfile = open('myfile.txt','r')print(myfile.readline())print(myfile.readline())print(myfile.readline())

hello text filegoodbyt text file复制代码

其次,也可以使用read方法一次性读取全部的文件内容

myfile = open('myfile.txt','r')print(myfile.read())

hello text filegoodbyt text file复制代码

最后再看一种更加python的方法,可以一行一行的自动扫描文件

myfile = open('myfile.txt','r')for line in myfile:    print(line, end='')

hello text filegoodbyt text file复制代码

这个方法涉及到了文件迭代器的概念,open方法创建的文件对象myfile将自动在每次循环迭代的时候读入并返回新的一行数据。这种形式通常很容易编写,可以很好的使用内存,且运行速度快。

关于迭代器的概念,我们在后续会专题介绍,这里只用记住:利用文件迭代器这种方法进行逐行数据读取,是最方便的。

我们再说说二进制文件的读写操作。需要记住的是我们必须使用bytes字符串处理二进制文件。因为当我们读取一个二进制数据文件的时候,得到的是一个bytes对象,二进制文件不会对数据执行任何转换。

提醒一下,对于二进制文件,不能以文本模式打开,因为文本文件实现了unicode编码,若将二进制文件的内容进行unicode解码,显然毫无意义,同时还可能会失败。上一小节我们谈过这个问题,这里就不多讲了,我们只回顾一个例子就可以了,

myfile = open('data.bin','wb')myfile.write(b'abcdefg')myfile.close()

data = open('data.bin', 'rb').read()print(data)print(list(data))

b'abcdefg'[97, 98, 99, 100, 101, 102, 103]复制代码

再来简单说说文件的关闭与刷新

文件的关闭。调用文件close方法将会终止对外部文件的链接,即手动关闭文件。如在文件不再使用的时候,这个文件对象的内存空间就会被收回,虽然python也有自动关闭文件的特性,但是手动关闭是一个最为保险的方法。后面会专门介绍文件对象的上下文管理器,他可以自动地关闭文件。

默认情况下,文件总是带有缓冲的,这意味着写入的文本可能不会立即自动从内存转换到硬盘。而关闭一个文件,或者运行flush方法,可以迫使缓存的数据立即进入硬盘。

相较于之前字符串形式的文件,我们最后来讲讲一种特殊的文件存储方式:对象存储

pickle模块是能够让我们直接在文件中存储几乎任何python对象的高级工具,也并不要求我们把字符串转换来转换去,他是一个通用的数据格式化和解析工具,我们举个例子,在文件中直接存储一个字典对象和一个列表对象

import pickleD = {'a': 1, 'b': 2, 'c': 3}L = [3, 4, 5]with open('datafile.pkl', 'wb') as file:    pickle.dump(D, file)    pickle.dump(L, file)复制代码

这样就很简单的把两个对象存储在指定的文件中了,想要取用这些对象,只需简单的进行对象重建即可

with open('datafile.pkl', 'rb') as file:    print(pickle.load(file))    print(pickle.load(file))

{'b': 2, 'a': 1, 'c': 3}[3, 4, 5]复制代码

Pickle模块执行的所谓对象序列化,本质上就是pickle内部字典对象、列表对象与字节字符串之间的转换过程。

还有一种struct工具,处理打包的二进制文件,这里简单的提一下,有个印象就好,struct工具能够构造并解析打包的二进制数据。从某种意义上来说,它也是一种数据转换工具。

首先我们来看如何将数据打包成二进制数据,并存储在文件中,第一个参数是格式化字符串,>表示高位在前、一个4字节整数、一个5字节字符串、一个浮点数的格式。

import struct

F = open('data.bin', 'wb')data = struct.pack('>i5sf', 8, b'abcde', 4.3)print(data)F.write(data)F.close()

F = open('data.bin', 'rb')data = F.read()print(data)values = struct.unpack('>i5sf', data)print(values)

b'\x00\x00\x00\x08abcde@\x89\x99\x9a'b'\x00\x00\x00\x08abcde@\x89\x99\x9a'(8, b'abcde', 4.300000190734863)复制代码

后半部分很容易理解,就是读取文件中的字节字符串,并用相同的格式将其解压出来就可以了,python直接将其转换为普通的Python对象

但是,我想说的是,一般来说二进制文件处理模式是用于处理更简单的二进制文件,例如图片和音频文件,是不需要解压它的内容的。同时若想存储数据,还是多使用数据库吧。

【妹子说】恩,当今天为止,我们学习了python中的几种主要的数据类型:列表、字典、元组和字符串。在基本数据类型的基础上,进一步了解了容器中的高级概念---迭代和列表解析式以及字符串里的重难点---字符编码与文件访问。要好好整理复习呀~

公众号二维码:python数据科学家:

给妹子讲python-S01E09 python文件操作小意思相关推荐

  1. python 对 yaml 文件操作

    python 对 yaml 文件操作 #!/usr/bin/env python # -*- encoding: utf-8 -*- """ @Introduce : p ...

  2. Python实现tab文件操作

    Python实现tab文件操作 # -*- coding:gbk -*- import os class TABFILE:     def __init__(self, filename, dest_ ...

  3. python怎么读取文件-python怎么读写文件操作

    本节内容:I/O操作概述 文件读写实现原理与操作步骤 文件打开模式 Python文件操作步骤示例 Python文件读取相关方法 文件读写与字符编码 一.I/O操作概述 I/O在计算机中是指Input/ ...

  4. python处理excel教程实例-python 读写excel文件操作示例【附源码下载】

    本文实例讲述了python 读写excel文件操作.分享给大家供大家参考,具体如下: 对excel文件的操作,python有第三方的工具包支持,xlutils,在这个工具包中包含了xlrd,xlwt等 ...

  5. Python中的文件操作和异常

    Python中的文件操作和异常 文章目录 Python中的文件操作和异常 一.文件 01. 文件的概念 1.1 文件的概念和作用 1.2 文件的存储方式 文本文件和二进制文件 02. 文件的基本操作 ...

  6. Python os模块文件操作(二)

    Python os模块文件操作(二) os模块对文件夹和文件的操作很多.可以先看: https://blog.csdn.net/weixin_43790276/article/details/9867 ...

  7. Python os模块文件操作(一)

    Python os模块文件操作(一) 一.文件描述符 在使用代码对文件进行操作时,为了指定操作的文件,避免不了要使用文件描述符,所以我们先介绍什么是文件描述符. 操作系统为了高效管理已经被打开的文件, ...

  8. python怎么读写文件-python怎么读写文件操作

    本节内容:I/O操作概述 文件读写实现原理与操作步骤 文件打开模式 Python文件操作步骤示例 Python文件读取相关方法 文件读写与字符编码 一.I/O操作概述 I/O在计算机中是指Input/ ...

  9. python对PDF文件操作

    python对PDF文件操作 下载模块PyPDF2,以页为基本单位对PDF文件进行读写操作,无法直接操作每一页内容. PDF文件读操作 导入函数 from PyPDF2 import PdfFileR ...

最新文章

  1. vue下实现textarea类似密码框的功能之探索input输入框keyup,keydown,input事件的触发顺序...
  2. vuex 源码分析_Vuex源码解析
  3. 比特币钱包(2) BIP32 HD钱包之生成子密钥
  4. mybatis 取传进来的参数 mybatis #{ } ${ }区别是啥?
  5. mysql 高级知识点_这是我见过最全的《MySQL笔记》,涵盖MySQL所有高级知识点!...
  6. php实现 字符串加密(分类分布分工,化不可能为可能)
  7. numpy.arange语法,作用以及举例
  8. python中如何导入图片,Unreal中的python如何导入图片资源到引擎
  9. 项目管理修炼之道-读书流水
  10. C语言-第5课 - const和volatile分析
  11. CentOS7安装GNOME可视化界面
  12. nexus配置第三方库文件
  13. excel锁定单元格不能修改_锁定单元格不被任意修改和删除
  14. 新冠疫情加速医疗废物处置行业发展,我国医废处置能力达6245吨/天
  15. 图像修复 python_50.图像修复
  16. 阿里云物联网平台设备之间通讯、数据转发
  17. 伽罗华域(Galois Field)理解、基于伽罗华域的四则运算(附详细python代码)
  18. 对冲基金到底是什么:细数对冲基金的七种武器
  19. 转载一篇加盟骗局的文章
  20. 微软的杀毒软件在 MacOS 上推出

热门文章

  1. 为什么我会被Kubernetes“洗脑”?
  2. 【世语纠正】相濡以沫丶本意放开一棵树,还有一片森林。
  3. win7锁定系统时间的设置
  4. 视频的格式怎么转换?分享几种好用的视频格式转换方法
  5. ASP.NET MVC 发布IIS HTTP 错误 403.14 - Forbidden
  6. IDEA-restClient,自带的Http测试工具
  7. 低电时限制USB反向充电
  8. 黑丝袜怎么画?画好黑丝袜有哪些技巧?
  9. Android-线程与多线程(了解)
  10. 天猫为何连续两季增长高达49%?