前面几集里,我们详细介绍了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 file
goodbyt text file

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

myfile = open('myfile.txt','r')
print(myfile.read())hello text file
goodbyt text file

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

myfile = open('myfile.txt','r')
for line in myfile:print(line, end='')hello text file
goodbyt 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 pickle
D = {'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 structF = 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中的几种主要的数据类型:列表、字典、元组和字符串。在基本数据类型的基础上,进一步了解了容器中的高级概念---迭代和列表解析式以及字符串里的重难点---字符编码与文件访问。要好好整理复习呀~

原文发布时间为:2018-08-08
本文作者:酱油哥
本文来自云栖社区合作伙伴“ Python爱好者社区”,了解相关信息可以关注“ Python爱好者社区”

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

  1. python的文件操作、模块操作、os模块、time、datatime模块以及模块的制作

    Day12新手小白学python 第十二节 python的文件操作.模块操作.os模块.time.datatime模块以及模块的制作 目录 Day12新手小白学python 前言 一.文件打开关闭 二 ...

  2. python写文件追加 按行追加_你真的会用python进行文件操作吗

    本篇文章主要比较系统的介绍了python中文件操作,以及在在使用中需要注意的问题. 什么是文件 文件是系统存储区域的一个命名位置,用来存储一些信息,便于后续访问.能够在非易失性存储器中实现持续性存储, ...

  3. Python基础-文件操作

    Python基础-文件操作 1.文件的打开和关闭 # 1.打开文件 # 默认r模式 只读 文件不存在,报错 # f = open('a.txt')# w模式 写权限 # 如果文件不存在,就会创建文件 ...

  4. 15 python的文件操作

    一.文件打开 文件(file) 通过Python程序来对计算机中的各种文件进行增删改查的操作,文件也叫I/O(Input/Output) 文件的操作步骤 打开文件 对文件进行各种操作(读.写)然后保存 ...

  5. python通过内置的什么函数打开一个文件_利用python进行文件操作

    这篇文章主要介绍了如何利用python进行文件操作,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下 什么是文件 文件是系统存储区域的一个命名位置,用来存储一些信息,便于后续访问.能够在非 ...

  6. Python之文件操作_读取_编码_os模块

    目录 前言 一.文件基本操作 1.什么是文件 2.操作文件的步骤 3.文件的路径 4.open函数操作权限总结 5.文件读取 6.with-open-as 7.文件定位读取 8.文件编码 二.OS模块 ...

  7. python对文件操作-python中文件操作的其他方法

    Python中文件操作的一般方法,包括打开,写入,关闭.本文中介绍下python中关于文件操作的其他比较常用的一些方法. 首先创建一个文件poems: p=open("poems" ...

  8. 给妹子讲python-S01E09 python文件操作小意思

    欢迎关注公众号:python数据科学家 [要点抢先看] 1.文件操作模式,他的本质是字符串 2.文件的读方法和文件迭代器逐行扫描 3.文件的关闭与刷新 4.二进制文件的读写与对象的文件存储 前面几集里 ...

  9. python之文件操作、对.txt文本文件的操作(读、写、修改、复制、合并)、对json文本文件的操作、json字符串与字典的相互转换。

    注意:本篇所讲的文件操作,都是对后缀为.txt..json文件进行的操作. 1.json其实就是一个文件的格式,像.txt一样,json也是一个纯文本文件.与.txt不同的是,json常用来存放有键值 ...

最新文章

  1. ctrl+shift+l指定选择 vscode_6.PYTHON开发利器之VS Code常用配置介绍
  2. OCP笔记部分整理-学习参考
  3. VirtualBox中ubantu虚拟机与主机进行复制粘贴
  4. 日志间隔_在日志中搜索时间间隔
  5. java错误switch找不到符号,Java使用StringBuilder时--找不到符号
  6. SpringCloud OpenFeign服务调用客户端介绍及配置使用
  7. vue 图片引入_一个Vue的时间插件
  8. 【Java】springboot 的学习笔记 的第一天
  9. JDBC连接数据库经验技巧集萃
  10. C# List最大值最小值问题 List排序问题 List Max/Min
  11. python selenium下载图片_用selenium自动加载浏览器下载图片
  12. 小型电商平台系统需求分析文档
  13. 【叨、校长】一个基于Extjs、Pushlet美轮美奂的Web聊天室
  14. 阿里云服务器安装MySql8.0.26
  15. 关于antd组件 datePicker和moment出现英文的坑
  16. 快速找出bug的几点建议
  17. java solr group by_solr高级查询——group和facet
  18. MSI(Message Signaled Interrupt)/MSI-X
  19. 2016·中国计算机辅助设计与计算机图形学大会
  20. PIE-engine 教程 ——使用阈值法加载指定区域的大蒜种植区域并统计其面积

热门文章

  1. 优酷分享html代码,优酷视频自适应移动版网页方案
  2. acos(-1)c语言,C++ acos()用法及代码示例
  3. HD2500 黑苹果完美驱动
  4. Android仿QQ登录界面示例,实现登录、注册功能。
  5. 如何揪出修改浏览器主页的流氓软件
  6. 响铃:全球车哈弗F7爆红的秘密知多少?
  7. 网络之简述互联网起源
  8. Qt基本绘图:用画家QPainter画线条和矩形
  9. 阿里云双12智能办公专场,阿里云DevOps ACA认证低至48元
  10. 2022年金融市场分析