零基础入门学Python系列内容的学习目录 → \rightarrow →零基础入门学Python系列内容汇总。
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 编码)。
打开模式 | 执行操作 |
---|---|
‘ r ’ | 以只读方式打开文件(默认) |
’ w ’ | 以写入的方式打开文件,会覆盖已存在的文件 |
’ x ’ | 如果文件已经存在,使用此模式打开将引发异常 |
‘ a ’ | 以写入模式打开,如果文件存在,则在末尾追加写入 |
’ b ’ | 以二进制模式打开文件 |
’ t ’ | 以文本模式打开(默认) |
’ + ’ | 可读写模式(可添加到其他模式中使用) |
’ U ’ | 通用换行符支持 |
使用open()
成功打开一个文件之后,它会返回一个文件对象,拿到这个文件对象,就可以读取或修改这个文件:
example1:>>># 先将record.txt文件放到Python的根目录下(如C:\Python)
>>>f= open(“record.txt”)
这样我们就成功打开了record.txt文件。
1.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模块中关于文件/目录常用的函数使用方法。
函数名 | 使用方法 |
---|---|
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’) |
使用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, ‘小明’, [‘其他列表’]]