温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Python中怎么实现自动化处理文件

发布时间:2021-07-10 16:33:32 来源:亿速云 阅读:139 作者:Leah 栏目:编程语言

Python中怎么实现自动化处理文件,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

遍历一个目录中的文件

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

├── 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

对上面脚本的解释如下:

  • 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循环:用不同参数运行一个文件

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

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中怎么实现自动化处理文件问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI