个人常用文件及目录操作

文件操作

规范文件名

# 文件夹名字的处理
import re
def validatetitle(title):  # 将无效的文件名字修改
    rstr='[/\:*?<>|@]'
    new_title=re.sub(rstr,'_',title)  # 将文件夹名不能包含的字符替换为下划线
    return new_title
validatetitle(':*fdkfjdlkf?')
# output: '__fdkfjdlkf_'

Pandas文件导出

  1. 多个DataFrame导入到同一个工作簿
#常规用法
ew = pd.ExcelWriter("sheet123.xlsx")   #先定义要存入的文件名xxx,然后分别存入xxx下不同的sheet
df_01.to_excel(ew, "sheet1", index=False)
df_02.to_excel(ew, "sheet2", index=False)
df_03.to_excel(ew, "sheet3", index=False)
ew.save()

#循环使用
sheet123 = pd.ExcelWriter("sheet123.xlsx")
for i in range(10):
	df.to_excel(sheet123,"sheet" + str(i))
sheet123.save()
  1. 多个DataFrame导入到同一张表里面
sheet123 = pd.ExcelWriter("sheet123.xlsx")
df_01.to_excel(sheet123)  #从第1行第1列开始写数据
df_02.to_excel(sheet123, startcol=8)  #从第1行第9列开始
df_03.to_excel(sheet123, startrow=10)  #从第11行第1列
df_04.to_excel(sheet123, startrow=10, startcol=8)  #从第11行第9列
sheet123.save()

Pandas不同文件导出的内存比较

# 导出为csv文件
df.to_csv("data.csv")

#导出为pkl文件
df.to_pickle("data.pkl")
pd.read_pickle("data.pkl")

# 导出为压缩文件
data_20_01.to_csv('sample.csv.gz', compression='gzip')
pd.read_csv('sample.csv.gz', compression='gzip', index_col=0)
# 这里的'sample.csv.gz'是将文件先保存为.csv文件,再将其压缩为.gz文件,当然即使不写.csv,最后也可以读取
  1. 内存占用
    csv文件450M,pkl文件350M,压缩文件115M。
  2. 读写速度
    pkl最快,csv次之,压缩文件最慢

合并Excel

将若干个工作簿中的工作表上下合并到一个工作表中

  1. 语法说明
xl = pd.ExcelFile(filename)  # 生成 pandas.io.excel._base.ExcelFile 对象
xl.sheet_names  # 获取工作簿下所有的工作表表明,如果有多个工作表,返回一个列表
xl.parse(sheet_name)  # 读取单个工作表的内容
  1. 示例
df_all = pd.DataFrame()
for file in ['文件01.xlsx','文件02.xlsx']:
    xl = pd.ExcelFile(file)
    sheet_names = xl.sheet_names  # 返回所有的sheet名,是一个列表
    for sheet_name in sheet_names:
        df_all = pd.concat([df_all, xl.parse(sheet_name)])

文件解压缩

import zipfile
with zipfile.ZipFile('需解压的文件名.zip', 'r') as files:
    files.extractall('解压后的文件名')

目录操作

os.getcwd()  # 返回当前工作路径
os.path.abspath('data')  # 返回文件或目录所在的路径
os.makedirs("data")  # 新建文件夹
try:
    os.makedirs("data")
except:
    print('文件夹已存在')

合并目录下的文件

  1. 获取目录下的文件名
    方法一
list_name = []
for i,j,k in os.walk('data_all/'):
    list_name.extend((i,j,k)[2])

os.walk(top, topdown=True, onerror=None, followlinks=False)
对于以top为根的目录树中的每个目录(包括top本身,但不包括’.‘和’…‘),生成一个3元组:(dirpath,目录名,文件名)
dirpath是一个字符串,是到目录的路径;dirnames是dirpath中子目录的名称列表(不包括’.‘和’…‘);文件名是dirpath中非目录文件的名称列表。
请注意,列表中的名称只是名称,没有路径组件。要获得dirpath中的文件或目录的完整路径(以top开始),请执行os.path.join(dirpath, name)。
如果可选参数’topdown’为true或未指定,则一个目录的三元组会在其任何子目录的三元组之前生成(目录是自顶向下生成的)。
如果topdown为false,则目录的三元组是在其所有子目录的三元组之后生成的(目录是自下而上生成的)。
当topdown为true时,调用者可以就地修改dirnames列表(例如,通过del或slice赋值),而walk只会递归地进入那些名称仍在dirnames中的子目录;
这可以用来删除搜索,或者强制执行特定的访问顺序。
当topdown为false时修改dirnames对os.walk()的行为没有影响,因为dirnames中的目录在dirnames本身生成时已经生成了。
无论topdown的值是多少,子目录列表都是在生成目录及其子目录的元组之前检索的。
默认情况下,os.scandir()调用产生的错误被忽略。
如果指定了可选参数’onerror’,它应该是一个函数;
它将带一个参数(一个OSError实例)被调用。
它可以报告错误以继续执行遍历,也可以抛出异常以中止遍历。
注意filename可以作为异常对象的filename属性。
默认情况下,os.walk不遵循指向支持它们的系统上的子目录的符号链接。
为了获得这个功能,将可选参数“followlinks”设置为true。
注意:如果你为top传递了一个相对路径名,不要在两次恢复walk时更改当前工作目录。
walk不会更改当前目录,并且假定客户机也不会更改。

方法二

os.listdir('data_all/')
# 什么参数都不写,默认是当前文件夹下,返回的是一个由文件名组成的列表,文件名是一个字符串
  1. 筛选出需要合并的文件
# 保留含有'.xlsx'的文件名
list_string= ['.xlsx']
list_text = os.listdir()  # 获取当前文件夹下的文件
file_name_list = list(filter(lambda text: all([word in text for word in list_string]), list_text ))
file_name_list
  1. 循环读取并进行表连接
data_all = pd.DataFrame()
for file_name in file_name_list: 
    data = pd.read_excel(file_name)
    data_all = pd.concat([data_all, data], axis=0)

更改文件类型

并不是简单修改后缀名,而是改变文件的导出格式

  1. 获取目标文件名:见上

  2. 循环批量修改

for file_name in tqdm.tqdm(file_name_list):
    data = pd.read_pickle(file_name)  # 使用对应的读取方式,我这里是.pkl文件
    data.to_csv(file_name[:-4] + '.gz', compression='gzip')  # 重新保存为压缩文件
    os.remove(file_name)  # 将原文件删除
    del data
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值