os.path.join(path1, path2, ....)
用途:将参数中的所有路径,用当前系统的路径拼接符进行拼接成完成一个路径。
场景:已知某个目录路径,该路径下有很多表格,需要获取这些表格的绝对路径。
root_dir = r'C:/demo' # 已知的目录路径
for excel in os.listdir(root_dir):
excel_path = os.path.join(root_dir, excel)
os.path.dirname(path)
用途:获取path
的上一级目录
场景:已知一个文本的绝对路径,想要获取该文本所在的目录路径
file_path = 'C:/demo/file.txt'
file_dir = os.path.dirname(file_path)
# 输出:C:/demo
os.path.basename(path)
用途:获取path
中最后一级的文件夹名或文件名
场景:已知一个文本的绝对路径,只想要获取该文本的部分,不想要完整的路径
file_path = 'C:/demo/file.txt'
file_dir = os.path.basename(file_path)
# 输出:file.txt
os.path.exists(path)
用途:判断path
这个路径是否存在,若不存在,则返回False
;存在,则返回True
。
场景:想判断某个文件是否存在,再来决定是否要删除
file_path = 'C:/demo/file.txt'
if os.path.exists(file_path):
print('文件存在,需要删除')
else:
print('文件不存在,不需要删除')
场景:有100条数据,按20个为一组,问:共有几组?
total_num = 100
per_group_num = 20
# 写法1
group_num = total_num // per_group_num if total_num % per_group_num == 0 else total_num // per_group_num + 1
# 写法2
group_num = total_num // per_group_num + (total % per_group_num > 0)
# 写法3
import math
group_num = math.ceil(total_num / per_group_num)
解决这个问题的是思路是向上取整,写法1和写法2的区别就在2的代码量更少,而写法3的代码量在三个写法中是最少的,但从性能上来说,导入模块和调用函数的过程肯定是会比直接计算会更慢一点。
如果是使用pandas
模块读取的表格,那获取表格的总行数的代码是df.index.stop
df = pd.read_excel(excel_path)
max_row = df.index.stop
可以用time
或datetime
来获取
import time
from datetime import datetime
# 使用time模块
cur_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
# 使用datetime
cur_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
使用os.mkdir(path)
来创建文件夹,但如果文件夹已存在的话,会报FileExistsError
错误。所以在创建之前,要先判断文件夹是否已存在。
dst_dir = 'C:/demo/dst_dir'
os.path.exists(dst_dir) or os.mkdir(dst_dir)
如果需要创建多级文件夹,即创建一个文件夹后,需要在该文件夹下再创建子文件夹,那么可以这样写:
dst_dir = 'C:/demo/parent_dir/child_dir'
os.path.exists(dst_dir) or os.makedirs(dst_dir)
如果想复制整个文件夹,包括该文件夹下的所有文件或子文件夹,可以使用shutil.copytree(src_path, dst_path)
src_path = 'C:/demo/src_dir'
dst_path = 'c:/demo2/'
# 将src_dir文件夹复制到demo2文件夹下
import shutil
shutil.copytree(src_path, dst_path)
这里要注意,假设目标文件夹如果已存在,则会出现报错,如果要覆盖已存在的目标文件夹,需要设置参数dirs_exist_ok=True
shutil.copytree(src_path, dst_path, dirs_exist_ok=True)
假设想获取demo表中column字段的所有值,并转为列表的形式,代码可以这样写:
import pandas as pd
df = pd.read_excel('demo.xlsx', usecols=['column'])
column_value_list = df['column'].to_list()