用Python操纵文件(自动化脚本的第一步)
@(Python相关)
os
模块相关
路径的跨平台(解决windows系统和Unix系统正反斜杠的问题)
import os
spam_path = os.path.join('usr','bin','spam')
控制工作目录
获取当前工作目录
cwd_path = os.getcwd()
更换当前工作目录
os.chdir(new_cwd_path)
创建新文件夹
os.makedirs(os.path.join(os.getcwd(),newdir,subdir))
此函数会沿着指定的路径连续创建不存在的文件夹,以确保路径的完整性
绝对路径与相对路径
检查给定路径是否是绝对路径
os.path.isabs(path)
将相对路径转化为绝对路径
abs_path = os.path.abspath(relative_path)
提取两个路径之间的相对路径(从start到end)
rel_path = os.path.relpath(end,start)
分离提取文件的绝对路径里的文件夹路径与文件名
dir_path = os.path.dirname(path)
file_name = os.path.basename(path)
dir_path, file_name = os.path.split(path)
若要逐级分离(当作字符串处理)
path_string.split(os.path.sep)
"""
此种用法在windows上第一个是磁盘的名称
而在Mac和Linux上第一个是空字符串,因为字符串的第一个字符就是分隔符~
"""
os.getcwd() -> '/mnt/lvm/dingning/datasets/coco'
os.getcwd().split(os.path.sep) -> ['', 'mnt', 'lvm', 'dingning', 'datasets', 'coco']
查看文件大小和文件夹内容
查看指定路径下的文件的大小(返回对应文件的字节数)
os.path.getsize(file_path)
查看指定文件夹路径对应的文件夹中的文件名称(返回文件名列表)
os.listdir(dir_path)
检查文件有效性
检查path
对应的文件或文件夹是否存在(返回布尔变量)
os.path.exists(path)
检查file_path
对应的文件路径是否存在,并且是否是一个文件(返回布尔变量)
os.path.isfile(file_path)
检查dir_path
对应的文件夹路径是否存在,并且是一个文件夹(返回布尔变量)
os.path.isdir(dir_path)
遍历目录树 os.walk()
传入一个文件夹路径,在每次迭代时返回三个值:
- 当前文件夹名称的字符串
- 当前文件夹中子文件夹的字符串列表
- 当前文件夹中问价的字符串列表
import os
for folderName, subfolders, filenames in os.walk(fold_path):
print 'the current folder is ' + folderName
for subfolder in subfolders:
print 'something'
for filename in filenames:
print 'something'
File
对象相关
文件读写
三个步骤:
- 针对指定文件路径字符串调用
open()
返回一个File
对象 - 调用
File
对象的read()
write()
方法 - 调用
File
对象的close()
方法,关闭文件 - 一般使用
with ... as ... :
方式使用文件
读取文件内容:
read()
将整个文件读取为一个字符串readlines()
将文本的每一行读取为一个字符串,返回整个文件所有行字符串对应的列表
写入文件(只有一个write()
方法):
- 以
'w'
方式打开文件,若该文件不存在,则创建,若存在,则覆盖 - 以
'a'
方式打开文件,若该文件不存在,则创建,若存在,则在文件内容的最后开始追加写入 write()
不会自动加入\n
,所以写入文件的时候如果需要换行,则需要自己添加换行分隔符
用shelve
模块保存Python变量(将Python变量保存到二进制shelf文件中)
import shelve
shelfFile = shelve.open('mydata')
cats = ['a','b','c']
shelfFile['cats'] = cats
shelfFile.close()
shelve
文件就像一个列表,对每一个变量都可以取一个名字作为key
,然后其内容则为value
list(shelfFile.keys()) -> ['cats']
list(shelfFile.values()) -> [['a','b','c']] """注意此处是一个列表,里面第一个元素正好是一个列表对象"""
pprint
模块--漂亮打印
pprint.pprint()
将列表和字典漂亮打印到屏幕pprint.pformat()
将上述要打印到屏幕的文本以字符串的方式返回,利用此可以简单用程序编写python脚本
import pprint
cats = ['a','b','c']
fileObj = open('myCats.py','w')
fileObj.write('cats = ' + pprint.pformat(cats) + '\n')
fileObj.close()
在另一个python脚本中可以这样使用(用Python程序编写更加庞大的Python程序的基础)
from myCats import cats
print cats -> ['a','b','c']
shutil
模块相关(shell utilize)(复制,移动,改名,删除)
复制文件和文件夹
shutil.copy(source, destination)
将source
处文件复制到destination
处
destination
如果是文件夹,则新文件名称与原始文件名称保持一致destination
如果是文件名,则以此文件名作为复制后的文件名复制
shutil.copytree(source, destination)
将source
处文件夹复制到destination
处
- 此时,
source
和destination
都必须是文件夹的路径
文件夹的移动和改名 shutil.move(source, destination)
使用需谨慎~
- 若
destination
指定的是文件夹,则必须判定该文件夹是否存在,否则会将路径当作是文件名重命名 - 若其存在,则将文件移动到该文件夹下
- 若
destination
指定的是文件名,若沿途的文件夹均存在,则移动到对应路径下,否则会抛出异常
删除文件 使用需谨慎
os.unlink(file_path)
必须存在且为文件路径,而不是文件夹路径os.rmdir(dir_path)
必须存在且为文件夹路径,而且必须为空文件夹shutil.rmtree(dir_path)
必须存在且为文件夹路径,不必为空文件夹- 使用时最好在此代码前面加入
print
将即将被删除的文件打印出来,提供给用户最终决定权
zipfile
模块相关 处理zip压缩文件
基本框架
import os
import zipfile
zipObj = zipfile.ZipFile(file_path) -> '生成一个ZipFile对象'
zipObj.namelist() -> '打印zip文件目录树,返回一个list' -> '子方法,返回zip文件的目录list'
spamInfo = zipObj.getinfo('spam.txt') -> 将list中的一个文件名传入子方法getinfo中,可以返回一个ZipInfo对象
ZinInfo
对象则保存zip文件每个子文件的有用的信息,如:
spamInfo.file_size
spamInfo.compress_size
解压缩 (ZipFile
对象的子方法)
extract()
:第一个参数为zip文件中的子文件名,如namelist()
中的一个文件名,第二个参数为目标文件夹路径extractall()
:无参数则解压全部文件到本地,也可以传递一个文件夹路径,在指定文件夹下解压缩
如果指定文件夹不存在,则创建
创建和添加ZIP文件
import zipfile
newZip = zipfile.ZipFile('new.zip','w') '此处可以用追加方式,只需将w改为a'
newZip.write(file_path, compress_type=zipfile.ZIP_DEFLATED) '指定压缩算法'
newZip.close()