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

成都创新互联凭借专业的设计团队扎实的技术支持、优质高效的服务意识和丰厚的资源优势,提供专业的网站策划、网站建设、成都网站制作、网站优化、软件开发、网站改版等服务,在成都10年的网站建设设计经验,为成都上千余家中小型企业策划设计了网站。
在处理数据科学项目时,这些技巧为笔者节省了大量的时间。希望对你也有用!
遍历一个目录中的文件
如果有如下多个数据需要读取和处理:
- ├── 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.csv
 - data/data2.csv
 - data/data1.csv
 
对上面脚本的解释如下:
现在就可以在‘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循环:用不同参数运行一个文件
如果要运行一个具有不同参数的文件怎么办呢?比如,可能要用同一个脚本去预测使用不同模型的数据。
- 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 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
 
现在便可以让脚本使用不同的模具来运行啦!
恭喜!现在你已经学会如何一次自动地读取和创造多个文件,如何用不同的参数运行一个文档,过去丢在琐碎工作中的时间可以利用起来做更重要的任务啦。
                本文标题:告别无聊循环!Python帮你自动化处理文件
                
                文章转载:http://www.csdahua.cn/qtweb/news18/168.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网