《Python编程快速上手》9、文件的读写与操作
[复制链接]
上述我们在进行程序的编写实现时,不管时全局变量还是局部变量都属于程序运行时存在的内容,那些打印的东西只不过时一时看的变相,从新运行或者关闭后就丢失了,要想留住就需要保存到文件中,这里就需要os模块的应用。
我们想要找到一个特定的文件,需要知道两个重要信息,一个是这个文件在哪里(文件的路径),一个就是这个文件叫什么名字(文件名),这就是文件的两个关键属性,路径指明了文件在计算机上的位置,文件名中,最后一个句点之后的部分称为文件的“扩展名”,它指出了文件的类型,text.docx 是一个 Word 文档。
我们新建一个text.docx作为测试文件。
由于文件夹的分隔符在Windows上与在OS X 和 Linux 上的表现形式不同,在编写Python脚本时要特别关注,可以使用os.path.join() 函数来操作,返回的是当前环境下的文件路径的字符串
os.getcwd() 函数获取当前工作目录;
os.chdir() 改变目录
例如:
import os
os.getcwd()
'F:\\01_SoftwareProgram\\03_Python'
os.chdir('G:\text')
Traceback (most recent call last):
File "<input>", line 1, in <module>
OSError: [WinError 123] 文件名、目录名或卷标语法不正确。: 'G:\text'
os.chdir('G:\\text')
如上可以看到,os.getcwd()得到的分割线是“\\”,这个和我们在文件夹框中复制的地址分隔符不一样,这块要注意。上面使用的是绝对路径,也可以使用相对路径,对于整个程序内部建议使用相对路径比较好,整个工程移动时不需要更改。
os.makedirs() 函数创建新文件夹,注意工作目录:
os.path 模块提供了一些函数,返回一个相对路径的绝对路径,以及检查给定的路径是否为绝对路径。
os.path.abspath(path) :将返回参数的绝对路径的字符串。这是将相对路径转换为绝对路径的简便方法;
os.path.isabs(path) :如果参数是一个绝对路径,就返回 True,如果参数是一个相对路径,就返回 False。
os.path.relpath(path, start) :将返回从 start 路径到 path 的相对路径的字符串。如果没有提供 start,就使用当前工作目录作为开始路径。
os.path.dirname(path):将返回一个字符串,它包含 path 参数中最后一个斜杠之前的所有内容。
os.path.basename(path) 将返回一个字符串,它包含 path 参数中最后一个斜杠之后的所有内容:
os.path.split(),获得这两个字符串的元组:
os.path.getsize(path) 将返回 path 参数中文件的字节数
os.path.getsize('text.docx')
0
os.path.getsize('text.docx')
12337
os.path.exists(path):如果 path 参数所指的文件或文件夹存在返回 True,否则返回 False;
os.path.isfile(path):如果 path 参数存在,并且是一个文件返回 True,否则返回 False;
os.path.isdir(path):如果 path 参数存在,并且是一个文件夹将返回 True,否则返回 False;
os.unlink(path) 将删除 path 处的文件;
os.rmdir(path) 将删除 path 处的文件夹。该文件夹必须为空,其中没有任何文件和文件夹。
os.walk() 函数被传入一个字符串值,即一个文件夹的路径。你可以在一个 for 循环语句中使用 os.walk() 函数,遍历目录树;
纯文本比较好操作,我们可以:
open() 函数打开,以读取纯文本文件的模式打开文件,或简称为“读模式”;
onetxt = open('text.txt')
onetxt.read()
'Python start'
onetxt就是一个对象,对这个对象read(),里面的内容就被都出来了;readlines()返回的是一个列表,注意同一个目标为不能重复读取,除非重新打开,这个有点像这个对象被复制过来了,对象中就没有了,不过不影响源文件。
写需要向open() 函数传递第二个参数 'w' ,这样就是以写模式打开;以 'a' 作为第二个参数传递给 open(),以添加模式打开该文件,在结尾添加。注意如果文件不存在会新建一个。
shelve 模块
shelve 模块可以将程序中的变量保存到二进制的 shelf 文件中。
例如:
>>> import shelve
>>> shelfFile = shelve.open('mydata')
>>> cats = ['Zophie', 'Pooka', 'Simon']
>>> shelfFile['cats'] = cats
>>> shelfFile.close()
>>> showshelf=shelve.open('mydata')
>>> showshelf['cats']
['Zophie', 'Pooka', 'Simon']
调用函数 shelve.open() 并传入一个文件名,然后将返回的值保存在一个变量中,如果没有会新建。可以对这个变量的 shelf 值进行修改,再调用 close() 。在 Windows 上运行前面的代码,可以看到在当前工作目录下出现 3 个新文件:mydata.bak、mydata.dat 和 mydata.dir。再读取出来可以发现已经写入了。
shutil(或称为 shell 工具)模块
shutil模块中包含一些函数,让你在 Python 程序中复制、移动、改名和删除文件。要使用 shutil 的函数,首先需要 import shutil。
shutil.copy(source, destination),将路径 source 处的文件复制到路径 destination 处的文件夹(source 和 destination 都是字符串)。如果 destination 是一个文件名,它将作为被复制文件的新名字。该函数返回一个字符串,表示被复制文件的路径。
import shutil
shutil.copy('text.txt', '/home')
'/home'
os.getcwd()
'G:\\text'
shutil.copy('text.txt', 'G:\\text\\text1')
'G:\\text\\text1\\text.txt'
shutil.copy('text.txt', 'text2.txt')
'text2.txt'
可以看到如果第一个参数是文件,则把文件复制进去,如果第二个参数是文件,就会以这个名另存一个。
shutil.move(source, destination),将路径 source 处的文件夹移动到路径 destination,并返回新位置的绝对路径的字符串,规则差不多;
shutil.rmtree(path) 将删除 path 处的文件夹,它包含的所有文件和文件夹都会被删除,不可恢复。
send2trash.send2trash() 函数来删除文件和文件夹,是将文件放到了回收站,相对安全一些,这是个第三方模块功能。
zipfile 模块中的函数,Python 程序可以创建和打开(或解压)ZIP 文件。和 os 和 shutil 模块中的文件处理函数一起使用,很容易将硬盘上任意位置的一些文件打包。
|