全文共3488字,预计学习时长9分钟

图源:unsplash

当代码投入生产时,你需要去组织代码的文件。读写、创建和运行许多代码文件是件非常耗时的事。本文将展示如何自动化这些繁琐的操作:

· 遍历一个目录中的文件

· 创建尚未建立的嵌套文件

· 使用bash for循环来运行一个有多个输入端的文件

在处理数据科学项目时,这些技巧为笔者节省了大量的时间。希望对你也有用!

遍历一个目录中的文件

如果有如下多个数据需要读取和处理:

├── data
│   ├── data1.csv
│   ├── data2.csv
│   └── data3.csv
└── main.py

可以手动地一次读取一个文件:

import pandas as pd def process_data(df):passdf = pd.read_csv(data1.csv)
process_data(df)df2 = pd.read_csv(data2.csv)
process_data(df2)df3 = pd.read_csv(data3.csv)
process_data(df3)

这是可行的,但是当有超过三个数据时,效率就会变得很低。如果上述脚本中唯一改变的是数据,为什么不用for循环来访问每个数据呢?

下面的脚本允许我们遍历指定目录中的文件:

import osimport pandas as pddefloop_directory(directory:str):'''Loop files in thedirectory'''for filename in os.listdir(directory):if filename.endswith(".csv"):file_directory = os.path.join(directory,filename)print(file_directory)pd.read_csv(file_directory)if __name__=='__main__':loop_directory('data/')data/data3.csv
data/data2.csv
data/data1.csv

对上面脚本的解释如下:

· for filename in os.listdir(directory) : 在一个指定的目录中遍历文件。

· if filename.endswith(".csv") :运行(访问?)以‘.csv’ 结尾的文件。

· file_directory = os.path.join(directory, filename) : 连接父目录(' data ')和该目录中的文件。

现在就可以在‘data’目录中访问所有的文件啦!

如果不存在,就创建嵌套文件

有时你可能想要通过创建嵌套文件来管理代码或模型,在之后更容易地寻找。比如,可以运用‘model 1’来明确规定一个有着具体特征的程序。当使用model 1时,你可能想要尝试运用不同种类的机器学习模型来训练数据(‘model1/XGBoost’)。

在使用各个机器学习模型时,我们甚至想要去保存不同样式的模型,因为它们所运用的超参数存在不同。因此,模型目录就像下面的示例一样复杂:

model
├── model1
│   ├── NaiveBayes
│   └── XGBoost
│       ├── version_1
│       └── version_2
└── model2├── NaiveBayes└── XGBoost├── version_1└── version_2

对每个所创的模型手动地建立嵌套文件可能需要花费很长的时间。有没有能够自动化这个进程的方法?有,通过使用 os.makedirs(datapath)。

defcreate_path_if_not_exists(datapath):'''Create the new file if not exists andsave the data'''ifnot os.path.exists(datapath):os.makedirs(datapath)if __name__=='__main__':create_path_if_not_exists('model/model1/XGBoost/version_1')

运行上面的文件,可以看到嵌套文件‘model/model2/XGBoost/version_2’自动建成了。现在便可以将模型或者数据储存到新的目录里了!

import joblibimport osdefcreate_path_if_not_exists(datapath):'''Create thenew file if not exists and save the data'''ifnot os.path.exists(datapath):os.makedirs(datapath)if __name__=='__main__':# Create directorymodel_path ='model/model2/XGBoost/version_2'create_path_if_not_exists(model_path)# Save filejoblib.dump(model, model_path)

Bash for循环:用不同参数运行一个文件

图源:unsplash

如果要运行一个具有不同参数的文件怎么办呢?比如,可能要用同一个脚本去预测使用不同模型的数据。

import joblib# df = ...model_path ='model/model1/XGBoost/version_1'model = joblib.load(model_path)model.predict(df)

如果一个脚本需要长时间来运行且有着多个要运行的模型,用脚本一个一个地运行会是非常耗时。有什么办法能让电脑独立自动地用一条命令行运行第1,2,3...,10个模型吗?

有的,可以使用bash for循环。首先,使用sys.argv来解析命令行参数。如果想要在命令行上重写配置文件可以使用类如hydra的工具。

import sysimport joblib# df = ...model_type = sys.argv[1]model_version = sys.argv[2]model_path =f'''model/model1/{model_type}/version_{model_version}'''print('Loading modelfrom', model_path, 'for training')model = joblib.load(model_path)mode.predict(df)
>>> python train.py XGBoost 1
Loading model from model/model1/XGBoost/version_1 for training

脚本已经被指令为使用模具第一版的XGBoost来预测命令行上的数据。现在便能在不同版本的模具中使用bash for循环。如果能用Python使用for循环,也可以在如下的终端上达成上述的目标。

$ for version in 2 3 4
> do
> python train.py XGBoost $version
> done

敲击Enter来分隔各行,输出:

Loading model from model/model1/XGBoost/version_1 for training
Loading model from model/model1/XGBoost/version_2 for training
Loading model from model/model1/XGBoost/version_3 for training
Loading model from model/model1/XGBoost/version_4 for training

现在便可以让脚本使用不同的模具来运行啦!

恭喜!现在你已经学会如何一次自动地读取和创造多个文件,如何用不同的参数运行一个文档,过去丢在琐碎工作中的时间可以利用起来做更重要的任务啦。

留言点赞关注

我们一起分享AI学习与发展的干货

编译组:欧舒蔓、岳馨妍

相关链接:https://towardsdatascience.com/3-python-tricks-to-read-create-and-run-multiple-files-automatically-5221ebaad2ba

如转载,请私信小芯,遵守转载规范

python xgboost_告别无聊循环!Python帮你自动化处理文件相关推荐

  1. python提前退出内层循环,python with提前退出遇到的坑与解决方案

    python with提前退出遇到的坑与解决方案 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  python with提前退出遇到的坑与解决方案.txt ] (友 ...

  2. python十进制转二进制循环,python十进制转二进制的详解

    python十进制转二进制的详解 发布时间:2020-09-16 11:46:35 来源:脚本之家 阅读:105 作者:V python十进制转二进制 python中十进制转二进制使用 bin() 函 ...

  3. matlab把每次循环的结果保存idx,来自Matlab的循环Python

    我开始用Python编写代码,我来自Matlab背景.我尝试执行的for循环出现问题.在 这是我在Matlab中的for循环ix = indoor(1); idx = indoor(2)-indoor ...

  4. 20190508——python基础(if...in...循环语句、while循环、两种循环对比)

    二.python基础(if...in...循环语句.while循环.两种循环对比) 1.for...in...循环语句 1)for循环:空房间 # 空房间的学名叫[元素](item),因为英文是ite ...

  5. python 重新执行本次循环_python重新循环

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python的循环编写程序时经常有代码需要重复运行,python提供了while ...

  6. 理解 Python 中的 for 循环

    译者注: 本文翻译自 Trey Hunner 于 2019 年 6 月 18 日发表的文章 Loop Better: a deeper look at iteration in Python 文中括号 ...

  7. php python 循环,python 怎么用for重复(循环)

    Python是一种脚本语言.他吸取了多种语言的精华,也有着独特的方面.其中,Python中有两种循环,分别为:for循环和while循环.本篇文章我将给大家详细讲述用for循环来实现某种重复操作. f ...

  8. Python 哪种方式循环最快,或许颠覆你的认知!

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 作者:StarryLand 来源:https://www.starky.ltd/202 ...

  9. pythonfor循环语句1到7、不要4_【IT专家】关于Python中的for循环控制语句

    本文由我司收集整编,推荐下载,如有疑问,请与我司联系 关于 Python 中的 for 循环控制语句 2010/06/14 500461 #第一个:求 50 - 100 之间的质数 import ma ...

  10. python跳出双层for循环的解决方法

    转载 python跳出双层for循环的解决方法 一.问题描述 在二维数组的遍历中,我们经常使用双层for循环.在某些时候,我们并不需要遍历整个二维数组.当条件满足时就应该终止for循环.但是,直接在内 ...

最新文章

  1. iOS RunLoop详解
  2. Python-5-字符串方法
  3. 当美团遇上双11,给千亿医美市场带来更大想象空间
  4. python六角形的绘制
  5. ZooKeeper实战(三):ZooKeeper实现分布式配置中心、分布式锁、Reactive响应式模型
  6. Service Request Account field in CRM and C4C
  7. windows下安装mysql教程
  8. SpringBoot - 资源国际化
  9. AcWing1083. Windy数(数位DP)题解
  10. VSTS 下的敏捷开发模板
  11. C语言中如何在不使用数组的情况下求方差?使用数组和使用for循环的区别。
  12. 统计(statistic)(二分查找+离散化)
  13. my soft_macsoft
  14. SQLI DUMB SERIES-3
  15. Oracle 工作语句记录
  16. 剑桥大学计算机专业博士几年毕业,剑桥大学学制是几年
  17. 微光集市-JWT和Token在本项目中的应用(版本5.0)
  18. iOS 关于iTMSTransporter上传IPA报错问题
  19. 下载Excel文件功能通过火狐浏览器下载没有后缀名
  20. 最短路(三) A star Heuristics

热门文章

  1. A.I. Wiki 人工智能
  2. 传智播客Java实现键盘数据的录入和if
  3. 190420每日一句
  4. Atitit order algo 排序算法 算法之道 目录 1.1. 生活中常用的排序是插入排序和选择排序 2 2. 0.1 算法分类 2 3. .2 算法复杂度 3 4. 十大经典排序算法(动图
  5. Atitit 管理plus 的概念,为什么要留长发与管理思想的结合 目录 1.1. 孝道的体现 身体发肤 受之发肤 不敢毁伤 出自 1 1.2. 著作介绍 1 1.3. 传统国学文化的复兴 中国
  6. Atitit 下推自动机﹙PDA﹚说明书 目录 1. 概念组成与原理成分 1 2. 性状 1 3. 适用场景 主治 适应症 1 3.1. 所有场景()。 1 3.2. 语法解析 构建ast 2 3.
  7. atitit.提升研发管理的利器---重型框架 框架 类库的区别
  8. paip.ollydbg 设置c++ qt API断点总结
  9. paip.提高用户体验----增添开始菜单类似360小助手按钮总结 (补充c925)
  10. paip.数据库全文检索 attilax总结