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

简介: 给妹子讲python-S01E09文件操作小意思。

前面几集里,我们详细介绍了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 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中的几种主要的数据类型:列表、字典、元组和字符串。在基本数据类型的基础上,进一步了解了容器中的高级概念---迭代和列表解析式以及字符串里的重难点---字符编码与文件访问。要好好整理复习呀~

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

相关文章
|
3月前
|
数据可视化 Linux iOS开发
Python脚本转EXE文件实战指南:从原理到操作全解析
本教程详解如何将Python脚本打包为EXE文件,涵盖PyInstaller、auto-py-to-exe和cx_Freeze三种工具,包含实战案例与常见问题解决方案,助你轻松发布独立运行的Python程序。
1128 2
|
2月前
|
监控 机器人 编译器
如何将python代码打包成exe文件---PyInstaller打包之神
PyInstaller可将Python程序打包为独立可执行文件,无需用户安装Python环境。它自动分析代码依赖,整合解释器、库及资源,支持一键生成exe,方便分发。使用pip安装后,通过简单命令即可完成打包,适合各类项目部署。
|
5月前
|
安全 Python
Python语言中常用的文件操作方法探讨
通过上述方法的结合使用,我们可以构筑出强大并且可靠的文件操作逻辑,切实解决日常编程中遇到的文件处理问题。
248 72
|
4月前
|
缓存 数据可视化 Linux
Python文件/目录比较实战:排除特定类型的实用技巧
本文通过四个实战案例,详解如何使用Python比较目录差异并灵活排除特定文件,涵盖基础比较、大文件处理、跨平台适配与可视化报告生成,助力开发者高效完成目录同步与数据校验任务。
177 0
|
5月前
|
编译器 Python
如何利用Python批量重命名PDF文件
本文介绍了如何使用Python提取PDF内容并用于文件重命名。通过安装Python环境、PyCharm编译器及Jupyter Notebook,结合tabula库实现PDF数据读取与处理,并提供代码示例与参考文献。
|
5月前
|
编译器 Python
如何利用Python批量重命名文件
本文介绍了如何使用Python和PyCharm对文件进行批量重命名,包括文件名前后互换、按特定字符调整顺序等实用技巧,并提供了完整代码示例。同时推荐了第三方工具Bulk Rename Utility,便于无需编程实现高效重命名。适用于需要处理大量文件命名的场景,提升工作效率。
|
5月前
|
移动开发 安全 Linux
Python文件操作的"保险箱":with语句深度实战指南
本文深入解析Python中`with`语句的原理与高级应用,通过“保险箱”类比,形象展示资源管理机制。从上下文管理协议到实战场景,涵盖文件、数据库、网络等多种资源的高效安全处理方式,助你写出更优雅、可靠的代码。
149 1
|
5月前
|
安全 Linux 网络安全
Python极速搭建局域网文件共享服务器:一行命令实现HTTPS安全传输
本文介绍如何利用Python的http.server模块,通过一行命令快速搭建支持HTTPS的安全文件下载服务器,无需第三方工具,3分钟部署,保障局域网文件共享的隐私与安全。
1118 0
|
6月前
|
编解码 Prometheus Java
当Python同时操作1000个文件时,为什么你的CPU只用了10%?
本文介绍如何构建一个高效的文件处理系统,解决单线程效率低、多线程易崩溃的矛盾。通过异步队列与多线程池结合,实现任务调度优化,提升I/O密集型操作的性能。
152 4
|
5月前
|
数据管理 开发工具 索引
在Python中借助Everything工具实现高效文件搜索的方法
使用上述方法,你就能在Python中利用Everything的强大搜索能力实现快速的文件搜索,这对于需要在大量文件中进行快速查找的场景尤其有用。此外,利用Python脚本可以灵活地将这一功能集成到更复杂的应用程序中,增强了自动化处理和数据管理的能力。
424 0

推荐镜像

更多