零基础入门学Python八—— 永久存储

零基础入门学Python系列内容的学习目录 → \rightarrow →零基础入门学Python系列内容汇总

  需要学习的基础知识有:文件文件系统、pickle模块等。

1. 文件

  几种常用的文件格式:.exe是可执行文件格式,.txt是文本文件.ppt是PowerPoint的专用格式等。

1.1 打开文件

  在Python中,使用open()函数来打开文件并返回文件对象,该函数的常用语法格式如下:

file = open(file_name [, mode='r' [ , buffering=-1 [ , encoding = None ]]])

此格式中,用 [ ] 括起来的部分为可选参数,即可以使用也可以省略。其中,各个参数所代表的含义如下:

  • file:表示要创建的文件对象。
  • file_name:要创建或打开文件文件名称,该名称要用引号(单引号或双引号都可以)括起来。需要注意的是,如果要打开的文件和当前执行的代码文件位于同一目录,则直接写文件名即可;否则,此参数需要指定打开文件所在的完整路径。
  • mode:可选参数,用于指定文件的打开模式。可选的打开模式如表1所示。如果不写,则认以只读(r)模式打开文件
  • buffering:可选参数,用于指定对文件做读写操作时,是否使用缓冲区。
  • encoding:手动设定打开文件时所使用的编码格式,不同平台的 ecoding 参数值也不同,以 Windows 为例,其认为 cp936(实际上就是 GBK 编码)。
表1 文件的打开模式
打开模式 执行操作
‘ r ’ 以只读方式打开文件认)
’ w ’ 以写入的方式打开文件,会覆盖已存在的文件
’ x ’ 如果文件已经存在,使用此模式打开将引发异常
‘ a ’ 以写入模式打开,如果文件存在,则在末尾追加写入
’ b ’ 以二进制模式打开文件
’ t ’ 以文本模式打开(认)
’ + ’ 可读写模式(可添加到其他模式中使用)
’ U ’ 通用换行符支持

  使用open()成功打开一个文件之后,它会返回一个文件对象,拿到这个文件对象,就可以读取或修改这个文件

  example1:>>># 先将record.txt文件放到Python的根目录下(如C:\Python)
       >>>f= open(“record.txt”)

  这样我们就成功打开了record.txt文件

1.2 文件对象的方法

  打开文件并取得文件对象之后,就可以利用文件对象的一些方法文件进行读取或修改等操作。表2列举了平时常用的一些文件对象方法

表2 文件对象方法
文件对象的方法 执行操作
close() 关闭文件
read(size = -1) 文件读取size个字符,当未给定size或给定负值的时候,读取剩余的所有字符,然后作为字符串返回
readline() 文件中读取一整行字符串
write(str) 将字符串str写入文件
writelines(seq) 文件写入字符串序列seq,seq应该是一个返回字符串的可迭代对象
seek(offset, from) 文件中移动文件指针,从from(0代表文件起始位置,1代表当前位置,2代表文件末尾)偏移 offset个字节
tell() 返回当前在文件中的位置

1.3 文件关闭

  close()方法用于关闭文件。如果你对文件进行了写入操作,那么应该在完成写入之后关闭文件。因为Python可能会缓存我们写入的数据,但如果中途发生类似断电之类的事故,那些缓存的数据根本就不会写入到文件中。所以,为了安全起见,我们要养成使用完文件后立刻关闭的好习惯。

1.4 文件的读取和定位

  文件的读取方法很多,可以使用文件对象的 read()readline()方法,也可以直接list(f)或者直接使用选代来读取。read()是按字节为单位进行读取,如果不设置参数,那么会全部读取出来,文件指针指向文件末尾。tell()方法可以告诉我们当前文件指针的位置。
  我们新建一个“小王子.txt”的文件内容如下:

我们整天忙忙碌碌,
像一群群没有灵魂的苍蝇,
喧闹着,
躁动着,
听不到灵魂深处的声音。
时光流逝,
童年远去,
我们渐渐长大,
岁月带走了许许多多的回忆,
也消蚀了心底曾今拥有的那份童稚的纯真,
我们不顾心灵桎梏,
沉溺于人世浮华,
专注于利益法则,
我们把自己弄丢了。

  example1:>>> f= open(“小王子.txt”, encoding=‘utf-8’)
       >>> f.read()
       ‘我们整天忙忙碌碌,\n像一群群没有灵魂的苍蝇,\n喧闹着,\n躁动着,\n听不到灵魂深处
       的声音。\n时光流逝,\n童年远去,\n我们渐渐长大,\n岁月带走了许许多多的回忆,\n
       也消蚀了心底曾今拥有的那份童稚的纯真,\n我们不顾心灵桎梏,\n沉溺于人世浮华,\n专
       注于利益法则,\n我们把自己弄丢了。’
       >>> f.tell()
       395

  使用seek()方法可以调整文件指针的位置。seek(offset, from)方法有两个参数,表示从from(0代表文件起始位置,1代表当前位置,2代表文件末尾)偏移offset字节。因此将文件指针设置到文件起始位置,使用seek(0, 0)即可:

       >>> f.seek(0, 0)
       0
       >>> f.tell()
       0

  readline()方法用于在文件中读取一整行,就是从文件指针的位置向后读取,直到遇到换行符(\n)结束。

       >>> f.readline()
       ‘我们整天忙忙碌碌,\n’

  之前我们学习过列表的强大,当时说什么都可以往里放,在这我们也可以把整个文件内容放到列表中:

       >>> list(f)
       [‘像一群群没有灵魂的苍蝇,\n’, ‘喧闹着,\n’, ‘躁动着,\n’, ‘听不到灵魂深处的声音
       。\n’, ‘时光流逝,\n’, ‘童年远去,\n’, ‘我们渐渐长大,\n’, ‘岁月带走了许许多多的
       回忆,\n’, ‘也消蚀了心底曾今拥有的那份童稚的纯真,\n’, ‘我们不顾心灵桎梏,\n’, ’
       沉溺于人世浮华,\n’, ‘专注于利益法则,\n’, ‘我们把自己弄丢了。’]

  迭代读取文本文件中的每一行:

       >>> f. seek(0, 0)
       0
       >>> for each_line in f:
           print(each_line)
       我们整天忙忙碌碌,
       像一群群没有灵魂的苍蝇,
       喧闹着,
       躁动着,
       听不到灵魂深处的声音。
       时光流逝,
       童年远去,
       我们渐渐长大,
       岁月带走了许许多多的回忆,
       也消蚀了心底曾今拥有的那份童稚的纯真,
       我们不顾心灵桎梏,
       沉溺于人世浮华,
       专注于利益法则,
       我们把自己弄丢了。

1.5 文件的写入

  如果需要写人文件,请确保之前的打开模式有’w’或’a’,否则会出错:

  example1:>>> f= open(“文件.txt”)
       >>> f.write("这是一段待写入的数据’)
       Traceback (most recent call last):
        File “<pyshell#41>”, line 1, in < module >
         f.write(“这是一段待写入的数据”)
       io.UnsupportedOperation: not writable
       >>> f.close()
       >>> f= open(“文件.txt”, “w”)
       >>> f.write(“这是一段待写入的数据”)
       10

  再次打开“文件.txt”之后,会发现文本"这是一段待写入的数据"已写入文件中。但是要注意的是,使用‘w’模式写入文件,此前的文件内容会被全部删除。如果要在原来的内容上追加,一定要使用’a’模式打开文件

2. 文件系统

  接下来学习跟Pyhton的文件相关的一些十分有用的模块。例如使用random模块中的randint()函数生成随机数。

  example1:>>>import random
       >>> random.randint(0, 9)
       1
       >>> random.randint(0, 9)
       5
       >>> random.randint(0, 9)
       7

  OS模块是Operating System的缩写,也就是操作系统。对于文件系统的访问,Pyhton一般是通过OS模块来实现的。表3中列举了OS模块中关于文件/目录常用的函数使用方法

表3 OS模块中关于文件/目录常用的函数使用方法
函数 使用方法
getcwd() 返回当前工作目录
chdir(path) 改变工作目录
listdir(path=’.’) 列举指定目录中的文件名(’.’表示当前目录,’. .'表示上一级目录)
mkdir(path) 创建单层目录,如该目录已存在抛出异常
makedirs(path) 递归创建多层目录,如果该目录已存在则抛出异常,注意:'E:\ \ a \ \ b’和 ’E:\ \ a \ \ c’并不会冲突
remove(path) 删除文件
rmdir(path) 删除单层目录,如果该目录非空则抛出异常
removedirs(path) 递归删除目录,从子目录到父目录逐层尝试删除,遇到目录非空则抛出异常
rename(old,new) 文件old重命名为new
system(command) 运行系统的shell命令
os.curdir 指代当前目录(’.’)
os.pardir 指代上一级目录(’. .’)
os.sep 输出操作系统特定的路径分隔符(在Windows下为’ \ \ ‘,Linux下为’ / ')
os.linesep 当前平台使用的行终止符(在Windows 下为’\r\n’,Linux下为’\n’)
os.name 指代当前使用的操作系统(包括’posix’、‘nt’、mac’、'os2’、‘ce’、‘java’)
3. pickle模块

  使用Python的picke模块可以非常容易地将列表字典这类复杂数据类型存储为文件。picke模块几乎可以把所有Python的对象都转化为二进制的形式存放,这个过程称为pickling,那么从二进制形式转换回对象的过程称为unpickling。

  example1:>>> import pickle
       >>> my_list =[123, 3.14,‘小明’, [‘其他列表’]]
       >>> pickle_file= open(‘E:\python\ \my_list.pkl’, ‘wb’)
       >>> pickle. dump(my_list, pickle_file)
       >>> pickle_file.close( )

  分析一下:这里希望把这个列表永久保存起来(保存成文件),打开的文件一定要以二进制的形式打开,后缀名可以随意,不过既然是使用pickle保存,为了今后容易记忆,建议还是使用.pkl 或.pickle。使用dump方法来保存数据,完成后记得保存,跟操作普通文本文件一样。
  程序执行之后E盘的python文件夹下会出现一个my list.pkl的文件,用记事本打开之后显示乱码(因为保存的是二进制形式),如下图所示。

在这里插入图片描述

  在使用的时候只需用二进制模式先把文件打开,然后用load把数据加载进来:

  example2:>>> import pickle
       >>> pickle_file= open(‘E:\python\ \my_list.pkl’, ‘rb’)
       >>> my_list = pickle.load(pickle_file)
       >>> print(my_list)
       [123, 3.14, ‘小明’, [‘其他列表’]]

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...