千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:南昌千锋IT培训  >  技术干货  >  用Python来自动化处理文件

用Python来自动化处理文件

来源:千锋教育
发布人:xqq
时间: 2023-11-06 03:05:43

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

·遍历一个目录中的文件

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

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

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

遍历一个目录中的文件

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

├──data

│├──data1.csv

│├──data2.csv

│└──data3.csv

└──main.py

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

importpandasaspddefprocess_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循环来访问每个数据呢?

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

importos

importpandasaspd

defloop_directory(directory:str):

'''Loopfilesinthedirectory'''

forfilenameinos.listdir(directory):

iffilename.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

对上面脚本的解释如下:

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

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

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

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

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

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

'''Createthenewfileifnotexistsandsavethedata'''

ifnotos.path.exists(datapath):

os.makedirs(datapath)

if__name__=='__main__':

create_path_if_not_exists('model/model1/XGBoost/version_1')

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

importjoblib

importos

defcreate_path_if_not_exists(datapath):

'''Createthenewfileifnotexistsandsavethedata'''

ifnotos.path.exists(datapath):

os.makedirs(datapath)

if__name__=='__main__':

#Createdirectory

model_path='model/model2/XGBoost/version_2'

create_path_if_not_exists(model_path)

#Savefile

joblib.dump(model,model_path)

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

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

importjoblib

#df=...

model_path='model/model1/XGBoost/version_1'

model=joblib.load(model_path)

model.predict(df)

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

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

importsys

importjoblib

#df=...

model_type=sys.argv[1]

model_version=sys.argv[2]

model_path=f'''model/model1/{model_type}/version_{model_version}'''

print('Loadingmodelfrom',model_path,'fortraining')

model=joblib.load(model_path)

mode.predict(df)

>>>pythontrain.pyXGBoost1

Loadingmodelfrommodel/model1/XGBoost/version_1fortraining

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

$forversionin234

>do

>pythontrain.pyXGBoost$version

>done

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

Loadingmodelfrommodel/model1/XGBoost/version_1fortraining

Loadingmodelfrommodel/model1/XGBoost/version_2fortraining

Loadingmodelfrommodel/model1/XGBoost/version_3fortraining

Loadingmodelfrommodel/model1/XGBoost/version_4fortraining

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

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

以上内容为大家介绍了用Python来自动化处理文件,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注IT培训机构:千锋教育。http://www.mobiletrain.org/

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

怎么找到苹果电脑 python安装位置

2023-11-06

用python怎么实现判断素数

2023-11-06

python如何将结果保存

2023-11-06

最新文章NEW

没基础的学python能学会吗?

2023-11-06

如何利用python快速生成大文件

2023-11-06

ubuntu安装python3的几种方式

2023-11-06

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>