博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python文件操作
阅读量:2440 次
发布时间:2019-05-10

本文共 4569 字,大约阅读时间需要 15 分钟。

对文件进行创建读取保存等操作

Windows 上的倒斜杠以及 OS X 和 Linux 上的正斜杠

Windows 上,路径书写使用倒斜杠(\)作为文件夹之间的分隔符。但在 OS XLinux 上,使用正斜杠作为它们的路径分隔符。如果想要程序运行在所有操作系统上,在编写 Python 脚本时,就必须处理这两种情况。
写程序时,先import os
os.path.join() 函数可以很容易完成这件事

如果将单个文件和路径上的文件夹名称的字符串传递给它,os.path.join()就会返回一个文件路径的字符串,包含正确的路径分隔符

>>> import os>>> os.path.join('usr', 'bin', 'coderdz')'usr\\bin\\coderdz'

这是在Windows上运行出的结果,输出中倒斜杠有两个,第一个倒斜杠是转义字符,每个倒斜杠都需要另外一个倒斜杠字符来转义得到

如果在Linux下得到的结果:
centos7
如果需要创建文件名称的字符串,os.path.join()函数就很有用
在这里插入图片描述
获取当前工作目录和改变目录

利用 os.getcwd()函数,可以取得当前工作路径的字符串,并可以利用 os.chdir()改变它,更改的目录不存在会报错!

在这里插入图片描述

创建新文件夹:
程序可以用 os.makedirs()函数创建新文件夹(目录)
在这里插入图片描述
在这里插入图片描述
处理绝对路径和相对路径
os.path 模块提供了一些函数,返回一个相对路径的绝对路径,以及检查给定的路径是否为绝对路径。
• 调用 os.path.abspath(path)将返回参数的绝对路径的字符串。这是将相对路径转换为绝对路径的简便方法。
• 调用 os.path.isabs(path),如果参数是一个绝对路径,就返回 True,如果参数是一个相对路径,就返回 False。
• 调用 os.path.relpath(path, start)将返回从 start 路径到 path 的相对路径的字符串。如果没有提供 start,就使用当前工作目录作为开始路径。

>>> os.path.abspath('.')'C:\\system32'>>> os.path.abspath('.\\Scripts')'C:\\system32\\Scripts'>>> os.path.isabs('.')False>>> os.path.isabs(os.path.abspath('.'))True>>> os.path.relpath('C:\\Windows', 'C:\\')'Windows'>>> os.path.relpath('C:\\Windows', 'C:\\spam\\eggs')'..\\..\\Windows'>>> os.getcwd()'C:\\system32'

调用 os.path.dirname(path)将返回一个字符串,它包含 path 参数中最后一个斜杠之前的所有内容。调用 os.path.basename(path)将返回一个字符串,它包含 path 参数中最后一个斜杠之后的所有内容。

>>> path = 'C:\\Windows\\System32\\calc.exe'>>> os.path.basename(path)'calc.exe'>>> os.path.dirname(path)'C:\\Windows\\System32'

如果同时需要一个路径的目录名称和基本名称,就可以调用 os.path.split()

>>> calcFilePath = 'C:\\Windows\\System32\\calc.exe'>>> os.path.split(calcFilePath)('C:\\Windows\\System32', 'calc.exe')

接受一个文件路径并返回每个文件夹的字符串的列表的方法:

>>> calcFilePath.split(os.path.sep)['C:', 'Windows', 'System32', 'calc.exe']

在 OS X 和 Linux 系统上,返回的列表头上有一个空字符串:

>>> '/usr/bin'.split(os.path.sep)['', 'usr', 'bin']

查看文件大小和文件夹内容

  • 调用 os.path.getsize(path)将返回 path 参数中文件的字节数。
  • 调用 os.listdir(path)将返回文件名字符串的列表,包含 path 参数中的每个文件
>>> os.path.getsize('C:\\Windows\\System32\\calc.exe')776192>>> os.listdir('C:\\Windows\\System32')['0409', '12520437.cpx', '12520850.cpx', '5U877.ax', 'aaclient.dll',--snip--'xwtpdui.dll', 'xwtpw32.dll', 'zh-CN', 'zh-HK', 'zh-TW', 'zipfldr.dll']

可以看到,我的计算机上的 calc.exe 程序是 776192 字节。在我的C:\Windows\system32 下有许多文件。如果想知道这个目录下所有文件的总字节数,就可以同时使用 os.path.getsize()和 os.listdir()。

>>> totalSize = 0>>> for filename in os.listdir('C:\\Windows\\System32'): totalSize = totalSize + os.path.getsize(os.path.join('C:\\Windows\\System32', filename))>>> print(totalSize)1117846456

可以查看C:\Windows\System32文件夹属性大小是否与计算一致。

检查路径有效性

如果你提供的路径不存在,许多 Python 函数就会崩溃并报错。os.path 模块提
供了一些函数,用于检测给定的路径是否存在,以及它是文件还是文件夹。
• 如果 path 参数所指的文件或文件夹存在,调用 os.path.exists(path)将返回 True,
否则返回 False。
• 如果 path 参数存在,并且是一个文件,调用 os.path.isfile(path)将返回 True,否
则返回 False。
• 如果 path 参数存在,并且是一个文件夹,调用 os.path.isdir(path)将返回 True,
否则返回 False。
在这里插入图片描述

文件读写过程

在 Python 中,读写文件有 3 个步骤:
1.调用 open()函数,返回一个 File 对象。
2.调用 File 对象的 read()或 write()方法。
3.调用 File 对象的 close()方法,关闭该文件。

myfile=open('D:\\hello.txt')  #打开文件对象#open函数默认只读,可加入参数'r'作为第二个参数,但效果也是只读模式>>> helloContent = helloFile.read()>>> helloContent'Hello world!'

使用 readlines()方法,从该文件取得一个字符串的列表,列表中的每个字符串就是文本中的每一行。

>>> sonnetFile = open('sonnet29.txt')>>> sonnetFile.readlines()[When, in disgrace with fortune and men's eyes,\n', ' I all alone beweep myoutcast state,\n', And trouble deaf heaven with my bootless cries,\n', Andlook upon myself and curse my fate,']

写入文件

  • open(file, ‘w’) :打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除覆盖。如果该文件不存在,创建新文件。
  • open(file, ‘a’) :打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
>>> baconFile = open('bacon.txt', 'w')>>> baconFile.write('Hello world!\n')13>>> baconFile.close()>>> baconFile = open('bacon.txt', 'a')>>> baconFile.write('Bacon is not a vegetable.')25>>> baconFile.close()>>> baconFile = open('bacon.txt')>>> content = baconFile.read()>>> baconFile.close()>>> print(content)Hello world!Bacon is not a vegetable.

用 shelve 模块保存变量

利用 shelve 模块,你可以将 Python 程序中的变量保存到二进制的 shelf 文件中。这样,程序就可以从硬盘中恢复变量的数据。中的变量保存到二进制的 shelf 文件中。这样,程序就可以从硬盘中恢复变量的数据。shelve 模块让你在程序中添加“保存”和“打开”功能。例如,如果运行一个程序,并输入了一些配置设置,就可以将这些设置保存到一个 shelf 文件,然后让程序下一次运行时加载它们。

import os, shelvedemo=shelve.open('demodata') #如果没有demodata文件,则创建cats=['Zophie', 'Pooka', 'Simon']demo['cats']=catsdemo.close()demo=shelve.open('demodata')print(type(demo))print(demo['cats'])

运行上述代码,会在当前目录生成demodata.bak, demodata.dir, demodata.dat三个新文件.而在LInux上,只会生成一个demodata.db文件。这些二进制文件存储着shelve数据。

在这里插入图片描述
运行结果:
在这里插入图片描述
shelf 值有 keys()和 values()方法,返回 shelf 中键和值的类似列表的值。因为这些方法返回类似列表的值,而不是真正的列表,所以应该将它们传递给 list()函数,取得列表的形式。

print(list(demo.keys()))print(list(demo.values()))

在这里插入图片描述

转载地址:http://befqb.baihongyu.com/

你可能感兴趣的文章
Markdown入门6-序列图
查看>>
SQLite的性能优化
查看>>
SQLite的并发处理
查看>>
cocos2d-x on wp8架构简介
查看>>
cocos2d-x中对象的位置,旋转,缩放
查看>>
cocos2d-x 的动画
查看>>
Camera相关技术
查看>>
.NET源码的内部排序实现
查看>>
.NET源码中的二分查找实现
查看>>
.NET源码中的链表
查看>>
单链表逆序
查看>>
二叉树遍历(层次,递归,非递归)
查看>>
判断单链表是否有环、找出两个单链表的交点
查看>>
Android Intent 简介
查看>>
Android Service 简介
查看>>
Windows Phone 8.1 App 图片资源需求列表
查看>>
.NET源码中的栈
查看>>
org.springframework.beans.NotWritablePropertyException
查看>>
java锁机制简介以及CAS操作
查看>>
request.getHeader("referer")防盗链
查看>>