1. OS模块文件操作
1.1 基本函数
Note: 在 Windows 上, 路径书写使用倒斜杠作为文件夹之间的分隔符。但在 OS X 和 Linux 上,使用正斜杠作为它们的路径分隔符。如果想要程序运行在所有操作系统上,在编写 Python 脚本时, 就必须处理这两种情况。
使用OS模块的path.join函数可以根据操作系统不同自动生成相应的路径,example:
import os
os.path.join('usr', 'bin', 'spam')
>>> windows: 'usr\\bin\\spam'
>>> linux: usr/bin/spam
OS模块还有其他有趣的函数,帮助你专注于操作,减少对操作系统差异的关注:
os模块function | 含义 |
---|---|
os.getcwd() | 获取当前所在目录 |
os.chdir(‘path’) | 切换到指定目录 |
os.makedirs(‘path’) | 创建指定目录 |
os.listdir(path) | 列出path路径下所有文件 |
os.unlink(path) | 删除path文件 |
os.rmdir(path) | 删除path文件夹,文件夹必须为空 |
os.path模块function | 含义 |
---|---|
os.path.abspath(path) | 返回path的绝对路径 |
os.path.isabs(path) | 判断path是否是绝对路径 |
os.path.relpath(path, start) | 返回从 start 路径到 path 的相对路径的字符串 |
os.path.dirname(path) | 返回path中路径名,去除文件名 |
os.path.basename(path) | 返回path中的文件名 |
os.path.split() | 返回一个元组,包含路径和文件名 |
os.path.sep | 代表指定操作系统中路径分隔符 |
os.path.getsize(path) | 返回文件大小 |
os.path.exists(path) | path是否存在 |
os.path.isfile(path) | path是否存在,且为文件 |
os.path.isdir(path) | path 是否存在,且为目录 |
1.2 os.walk遍历文件夹
os.walk()函数被传入一个字符串值,即一个文件夹的路径。你可以在一个 for 循环语句中使用 os.walk()函数,遍历目录树, os.walk()在循环的每次迭代中,返回 3 个值:
- 当前文件夹名称的字符串。
- 当前文件夹中子文件夹的字符串的列表。
- 当前文件夹中文件的字符串的列表
for dirname, subdir, filename in os.walk('.'):
print('directory name: ' + dirname)
print(subdir) >>>list
print(filename) >>>list
2. 文件读写
在 Python 中, 读写文件有 3 个步骤:
- 调用 open()函数, 返回一个 File 对象。
- 调用 File 对象的 read()或 write()方法。
- 调用 File 对象的 close()方法,关闭该文件。
Example:
# write to file
file = open('./hello.txt', 'w')
file.write('hello world\n')
file.close()
# append to file
file = open('./hello.txt', 'a')
file.write('hello python\n')
file.close()
# read from file
file = open('./hello.txt', 'r')
text = file.read()
file.close()
print(text)
3. shelve模块保存变量到文件
利用 shelve 模块, 你可以将 Python 程序中的变量保存到二进制的 shelf 文件中。这样, 程序就可以从硬盘中恢复变量的数据。shelve.open()会创建二进制的shelf文件,允许你像字典一样存取数据:
import shelve
shelf = shelve.open('data')
cats = ['zophie', 'pooka', 'simon']
shelf['cats'] = cats
shelf.close()
保存之后,在windows上会生成mydata.bak、 mydata.dat 和 mydata.dir三个文件。在Linux和 OS X 上, 只会创建一个 mydata.db 文件。
读取文件时,和字典一样的操作:
import shelve
shelf = shelve.open('data')
for cat in shelf['cats']:
print(cat)
删除变量时,直接使用del shelf[key]即可。
4. shutil模块移动复制删除
shutil(或称为 shell 工具)模块中包含一些函数,让你在 Python 程序中复制、移动、改名和删除文件。
如下为常用的函数:
函数 | 含义 |
---|---|
shutil.copy(source, destination) | 将路径 source 处的文件复制到路径 destination 处的文件夹。返回被复制文件的路径 |
shutil.copytree(source, destination) | 将路径 source 处的文件夹,包括它的所有文件和子文件夹,复制到路径 destination 处的文件夹。返回被复制文件的路径 |
shutil.move(source, destination) | 路径 source 处的文件夹移动到路径 destination,并返回新位置的绝对路径的字符串。也可重命名 |
shutil.rmtree(path) | 删除path文件夹和所有子文件夹 |
Note: shutil删除文件是彻底删除,如果需要移到回收站,可以使用第三方的库send2trash。
5. zipfile解压缩文件
要读取 ZIP 文件的内容, 首先必须创建一个 ZipFile 对象。ZipFile 对象有一个 namelist()方法,返回 ZIP 文件中包含的所有文件和文件夹的字符串的列表。这些字符串可以传递给 ZipFile 对象的 getinfo()方法,返回一个关于特定文件的 ZipInfo 对象。
ZipInfo 对象有自己的属性,诸如表示字节数的 file_size 和 compress_size,它们分别表示原来文件大小和压缩后文件大小。
ZipFile 对象的 extractall(path)方法从 ZIP 文件中解压缩所有文件和文件夹, 放到path中。
ZipFile 对象的 extract(filename,path)方法从 ZIP 文件中解压缩单个文件。
Example:
import zipfile
zip = zipfile.ZipFile('d:\\Desktop\Desktop.zip')
# 打印所有文件
print(zip.namelist())
# 获取某个文件对应的ZipInfo对象
info = zip.getinfo('Cas T&D.xlsx')
# 打印文件大小
print(info.file_size)
# 解压文件
zip.extractall('d:\\Desktop')
zip.close()
要创建你自己的压缩 ZIP 文件, 必须以“写模式”打开 ZipFile 对象,即传入’w’ 作为第二个参数。write()方法的第一个参数是一个字符串, 代表要添加的文件名。第二个参数是“压缩类型”参数(可以默认),它告诉计算机使用怎样的算法来压缩文件。
如果
只是希望将文件添加到原有的 ZIP 文件中, 就要向 zipfile.ZipFile()传入’a’作为第二个参数,以添加模式打开 ZIP 文件
#创建一个压缩文件
zip = zipfile.ZipFile('myzip.zip', 'w')
os.chdir('d:\\Desktop\CDE')
for item in os.listdir('.'):
zip.write(item)
zip.close()