字符串拼接方法
- f-string方法
- format()函数
-
- 运算符
pathlib模块
初级体验
from pathlib2 import Path # 获取当前目录 current_path = Path.cwd() print(current_path) # 输出如下: # /Users/Anders/Documents/ # 获取Home目录 home_path = Path.home() print(home_path) # 输出如下: # /Users/Anders
父级操作
from pathlib2 import Path # 获取当前目录 current_path = Path.cwd() # 获取上级父目录 print(current_path.parent) # 获取上上级父目录 print(current_path.parent.parent) # 获取上上上级父目录 print(current_path.parent.parent.parent) # 获取上上上上级父目录 print(current_path.parent.parent.parent.parent) # 获取上上上上级父目录 print(current_path.parent.parent.parent.parent.parent) # 输出如下: # /Users/Anders/Documents/Jupyter # /Users/Anders/Documents # /Users/Anders # /Users # /
遍历父目录
# 获取当前目录 from pathlib2 import Path current_path = Path.cwd() for p in current_path.parents: print(p) # 输出如下: # /Users/Anders/Documents/Jupyter # /Users/Anders/Documents # /Users/Anders # /Users # /
文件名操作
:::info
name 文件名
suffix 文件的扩展名
suffixes 返回多个扩展名列表
stem 文件的主名(不包含扩展名)
with_name(name) 替换 文件名并返回一个新的路径
with_suffix(suffix) 替换扩展名,返回新的路径,扩展名存在则不变
:::
路径的拼接与分解
from pathlib2 import Path # 直接传进一个完整字符串 example_path1 = Path('/Users/Anders/Documents/powershell-2.jpg') # 也可以传进多个字符串 example_path2 = Path('/', 'Users', 'dongh', 'Documents', 'python_learn', 'file1.txt') # 也可以利用Path.joinpath() example_path3 = Path('/Users/Anders/Documents/').joinpath('python_learn') # 利用 / 可以创建子路径 example_path4 = Path('/Users/Anders/Documents') example_path5 = example_path4 / 'python_learn/pic-2.jpg'
遍历文件夹
from pathlib2 import Path # 返回目录中最后一个部分的扩展名 example_path = Path('/Users/Anders/Documents') [path for path in example_path.iterdir()] # 输出如下: # [PosixPath('/Users/Anders/Documents/abc.jpg'), # PosixPath('/Users/Anders/Documents/book-master'), # PosixPath('/Users/Anders/Documents/Database'), # PosixPath('/Users/Anders/Documents/Git'), # PosixPath('/Users/Anders/Documents/AppProjects')]
文件操作
操作语法是: open(mode=‘r’, bufferiong=-1, encoding=None, errors=None, newline=None)
from pathlib2 import Path example_path = Path('/Users/Anders/Documents/information/JH.txt') with example_path.open(encoding = 'GB2312') as f: print(f.read()) # or example_path = Path('/Users/Anders/Documents/information/JH.txt') example_path.read_text(encoding='GB2312')
对于简单的文件读写,在pathlib库中有几个简便的方法:
.read_text(): 以文本模式打开路径并并以字符串形式返回内容。
.read_bytes(): 以二进制/字节模式打开路径并以字节串的形式返回内容。
.write_text(): 打开路径并向其写入字符串数据。
.write_bytes(): 以二进制/字节模式打开路径并向其写入数据。
创建和删除文件夹
关于这里的创建文件目录mkdir方法接收两个参数:
- parents:如果父目录不存在,是否创建父目录。
- exist_ok:只有在目录不存在时创建目录,目录已存在时不会抛出异常。
from pathlib2 import Path example_path = Path('/Users/Anders/Documents/test1/test2/test3') # 创建文件目录,在这个例子中因为本身不存在test1,test2,test3,由于parents为True,所以都会被创建出来。 example_path.mkdir(parents = True, exist_ok = True) # 删除路径对象目录,如果要删除的文件夹内包含文件就会报错 example_path.rmdir()
判断文件及文件夹对象是否存在
关于文件的判断还有很多相关属性
is_dir() 是否是目录
is_file() 是否是普通文件
is_symlink() 是否是软链接
is_socket() 是否是socket文件
is_block_device() 是否是块设备
is_char_device() 是否是字符设备
is_absolute() 是否是绝对路径
resolve() 返回一个新的路径,这个新路径就是当前Path对象的绝对路径,如果是软链接则直接被解析
absolute() 也可以获取绝对路径,但是推荐resolve()
exists() 该路径是否指向现有的目录或文件:
from pathlib2 import Path example_path = Path('/Users/Anders/Documents/pic-2.jpg') # 判断对象是否存在 print(example_path.exists()) # 输出如下: # True # 判断对象是否是目录 print(example_path.is_dir()) # 输出如下: # False # 判断对象是否是文件 print(example_path.is_file()) # 输出如下: # True
文件的信息
只需要通过**.stat()**方法就可以返还指定路径的文件信息
from pathlib2 import Path example_path = Path('/Users/Anders/Documents/pic.jpg') print(example_path.stat()) # 输出如下: # os.stat_result(st_mode=33188, st_ino=8598206944, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=38054, st_atime=1549547190, st_mtime=1521009880, st_ctime=1521009883) # 文件大小 最后访问时间 最后修改时间 创建时间 print(example_path.stat().st_size) # 输出如下: # 38054
操作工作簿
移动并重命名工作簿
from pathlib import Path # pathlib模块是python内置模块 old_file_path = Path('F:\\python\\第2章\\员工档案.xlsx') # 原路径 new_file_path = Path('F:\\table\\员工信息表.xlsx') # 新路径 old_file_path.rename(new_file_path) # 重命名 rename只能在同一个磁盘分区
解析工作簿的路径信息
from pathlib import Path file_path = Path('F:\\python\\第2章\\出库表.xlsx') path = file_path.parent # 文件路径 file_name = file_path.name # 文件名 stem_name = file_path.stem # 文件主名 suf_name = file_path.suffix # 文件扩展名 print(path) print(file_name) print(stem_name) print(suf_name)
提取文件夹内所有工作簿的文件名
from pathlib import Path folder_path = Path('F:\\python\\第2章\\工作信息表\\') file_list = folder_path.glob('*.xls*') # glob用于查找符合指定规则的文件或文件夹 lists = [] for i in file_list: file_name = i.name lists.append(file_name) print(lists) #['供应商信息表.xlsx', '出库表.xlsx', '同比增长情况表.xls', '员工档案表.xlsx', '库存表.xlsx']
新建一个工作簿
import xlwings as xw app = xw.App(visible=False, add_book=False) # 启动Excel程序 workbook = app.books.add() # 新建工作簿 workbook.save('F:\\test\\1月销售表.xlsx') # 保存新建工作簿 workbook.close() # 关闭工作簿 app.quit() # 退出Excel程序
循环新建多个表
import xlwings as xw app = xw.App(visible=False, add_book=False) for i in range(1, 6): workbook = app.books.add() workbook.save(f'F:\\test\\销售表{ i}.xlsx') # f-string 替换{}里内容 workbook.close() app.quit()
打开一个已有的工作簿
import xlwings as xw app = xw.App(visible=True, add_book=False) file_path = '员工信息表.xlsx' app.books.open(file_path)
打开文件夹下的所有工作簿
from pathlib import Path import xlwings as xw app = xw.App(visible=True, add_book=False) folder_path = Path('F:\\python\\第2章\\工作信息表\\') file_list = folder_path.glob('*.xls*') for i in file_list: app.books.open(i)
批量重命名多个工作簿
from pathlib import Path folder_path = Path('F:\\python\\第2章\\table\\') file_list = folder_path.glob('*月.xlsx') for i in file_list: old_file_name = i.name new_file_name = old_file_name.replace('月', '月销售表') # with_name是pathlib路径对象函数,用于替换原路径文件名 new_file_path = i.with_name(new_file_name) # 用新的文件名构造新的文件路径 i.rename(new_file_path) # 执行重命名操作
批量转换工作簿的文件格式
from pathlib import Path import xlwings as xw app = xw.App(visible=False, add_book=False) folder_path = Path('F:\\python\\第2章\\工作信息表\\') file_list = folder_path.glob('*.xlsx') for i in file_list: new_file_path = str(i.with_suffix('.xls')) # SaveAs不能识别路径 workbook = app.books.open(i) # 打开要转换文件格式的工作簿 workbook.api.SaveAs(new_file_path, FileFormat=56) # 56代表.xls. 51代表.xlsx workbook.close() app.quit()
将一个工作簿拆分为多个工作簿
import xlwings as xw app = xw.App(visible=False, add_book=False) file_path = 'F:\\python\\第2章\\新能源汽车备案信息.xlsx' workbook = app.books.open(file_path) worksheet = workbook.sheets for i in worksheet: new_workbook = app.books.add() new_worksheet = new_workbook.sheets[0] i.copy(before=new_worksheet) # 将来源工作簿的当前工作表复制到新建工作簿的第一个工作表之前 new_workbook.save('F:\\python\\第2章\\汽车备案信息\\{}.xlsx'.format(i.name)) new_workbook.close() app.quit()
将多个工作簿合并为一个工作簿
from pathlib import Path import pandas as pd folder_path = Path('F:\\python\\第2章\\上半年销售统计\\') file_list = folder_path.glob('*.xls*') with pd.ExcelWriter('F:\\python\\第2章\\总表.xlsx') as workbook: for i in file_list: stem_name = i.stem data = pd.read_excel(i, sheet_name=0) data.to_excel(workbook, sheet_name=stem_name, index=False)
按照扩展名分类工作簿
from pathlib import Path folder_path = Path('第2章\\工作文件\\') # 给出要分类的文件夹路径 file_list = folder_path.glob('*.xls*') for i in file_list: suf_name = i.suffix new_folder_path = folder_path / suf_name # 构造以扩展名命名的