342|2

6060

帖子

7

TA的资源

版主

楼主
 

《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 模块中的文件处理函数一起使用,很容易将硬盘上任意位置的一些文件打包。

最新回复

干货满满  详情 回复 发表于 2024-6-2 21:55
点赞 关注
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 

回复
举报

2

帖子

1

TA的资源

一粒金砂(初级)

沙发
 
学习了
 
 
 

回复

222

帖子

3

TA的资源

一粒金砂(高级)

板凳
 

干货满满


 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表