Python办公自动化Excel

字符串拼接方法

  • f-string方法
  • format()函数
    • 运算符

pathlib模块

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  # 构造以扩展名命名的
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值