告别无聊循环!Python帮你自动化处理文件


全文共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 os      import pandas as pd      defloop_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.csvdata/data2.csvdata/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 joblib      import os             defcreate_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 directory       model_path = model/model2/XGBoost/version_2         create_path_if_not_exists(model_path)          # Save file       joblib.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 sys      import 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 1Loading 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 trainingLoading model from model/model1/XGBoost/version_2 for trainingLoading model from model/model1/XGBoost/version_3 for trainingLoading 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

如转载,请后台留言,遵守转载规范

推荐文章阅读

ACL2018论文集50篇解读

EMNLP2017论文集28篇论文解读

2018年AI三大顶会中国学术成果全链接

ACL2017论文集:34篇解读干货全在这里

10篇AAAI2017经典论文回顾

长按识别二维码可添加关注

读芯君爱你

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值