日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
告別無聊循環(huán)!Python幫你自動化處理文件

當代碼投入生產(chǎn)時,你需要去組織代碼的文件。讀寫、創(chuàng)建和運行許多代碼文件是件非常耗時的事。本文將展示如何自動化這些繁瑣的操作:

成都創(chuàng)新互聯(lián)憑借專業(yè)的設(shè)計團隊扎實的技術(shù)支持、優(yōu)質(zhì)高效的服務(wù)意識和豐厚的資源優(yōu)勢,提供專業(yè)的網(wǎng)站策劃、網(wǎng)站建設(shè)、成都網(wǎng)站制作、網(wǎng)站優(yōu)化、軟件開發(fā)、網(wǎng)站改版等服務(wù),在成都10年的網(wǎng)站建設(shè)設(shè)計經(jīng)驗,為成都上千余家中小型企業(yè)策劃設(shè)計了網(wǎng)站。

  • 遍歷一個目錄中的文件
  • 創(chuàng)建尚未建立的嵌套文件
  • 使用bash for循環(huán)來運行一個有多個輸入端的文件

在處理數(shù)據(jù)科學(xué)項目時,這些技巧為筆者節(jié)省了大量的時間。希望對你也有用!

遍歷一個目錄中的文件

如果有如下多個數(shù)據(jù)需要讀取和處理:

 
 
 
 
  1. ├── data 
  2. │   ├── data1.csv 
  3. │   ├── data2.csv 
  4. │   └── data3.csv 
  5. └── main.py 

可以手動地一次讀取一個文件:

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

這是可行的,但是當有超過三個數(shù)據(jù)時,效率就會變得很低。如果上述腳本中唯一改變的是數(shù)據(jù),為什么不用for循環(huán)來訪問每個數(shù)據(jù)呢?

下面的腳本允許我們遍歷指定目錄中的文件:

 
 
 
 
  1. import os 
  2.       import pandas as pd 
  3.       defloop_directory(directory:str): 
  4.          '''Loop files in thedirectory''' 
  5.                  for filename in os.listdir(directory): 
  6.              if filename.endswith(".csv"): 
  7.                   file_directory = os.path.join(directory,filename) 
  8.                   print(file_directory) 
  9.                   pd.read_csv(file_directory) 
  10.                                if __name__=='__main__': 
  11.          loop_directory('data/') 
  12.   
  13. data/data3.csv 
  14. data/data2.csv 
  15. data/data1.csv 

對上面腳本的解釋如下:

  • for filename in os.listdir(directory) : 在一個指定的目錄中遍歷文件。
  • if filename.endswith(".csv") :運行(訪問?)以‘.csv’ 結(jié)尾的文件。
  • file_directory = os.path.join(directory, filename) : 連接父目錄(' data ')和該目錄中的文件。

現(xiàn)在就可以在‘data’目錄中訪問所有的文件啦!

如果不存在,就創(chuàng)建嵌套文件

有時你可能想要通過創(chuàng)建嵌套文件來管理代碼或模型,在之后更容易地尋找。比如,可以運用‘model 1’來明確規(guī)定一個有著具體特征的程序。當使用model 1時,你可能想要嘗試運用不同種類的機器學(xué)習模型來訓(xùn)練數(shù)據(jù)(‘model1/XGBoost’)。

在使用各個機器學(xué)習模型時,我們甚至想要去保存不同樣式的模型,因為它們所運用的超參數(shù)存在不同。因此,模型目錄就像下面的示例一樣復(fù)雜:

 
 
 
 
  1. model 
  2. ├── model1 
  3. │   ├── NaiveBayes 
  4. │   └── XGBoost 
  5. │       ├── version_1 
  6. │       └── version_2 
  7. └── model2 
  8.     ├── NaiveBayes 
  9.     └── XGBoost 
  10.         ├── version_1 
  11.         └── version_2 

對每個所創(chuàng)的模型手動地建立嵌套文件可能需要花費很長的時間。有沒有能夠自動化這個進程的方法?有,通過使用 os.makedirs(datapath)。

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

運行上面的文件,可以看到嵌套文件‘model/model2/XGBoost/version_2’自動建成了。現(xiàn)在便可以將模型或者數(shù)據(jù)儲存到新的目錄里了!

 
 
 
 
  1. import joblib 
  2.       import os 
  3.              defcreate_path_if_not_exists(datapath): 
  4.           '''Create thenew file if not exists and save the data''' 
  5.                  ifnot os.path.exists(datapath): 
  6.              os.makedirs(datapath) 
  7.              if __name__=='__main__': 
  8.                # Create directory 
  9.        model_path ='model/model2/XGBoost/version_2' 
  10.         create_path_if_not_exists(model_path) 
  11.           # Save file 
  12.        joblib.dump(model, model_path) 

Bash for循環(huán):用不同參數(shù)運行一個文件

如果要運行一個具有不同參數(shù)的文件怎么辦呢?比如,可能要用同一個腳本去預(yù)測使用不同模型的數(shù)據(jù)。

 
 
 
 
  1. import joblib 
  2.              # df = ... 
  3.              model_path ='model/model1/XGBoost/version_1' 
  4.       model = joblib.load(model_path) 
  5.       model.predict(df) 

如果一個腳本需要長時間來運行且有著多個要運行的模型,用腳本一個一個地運行會是非常耗時。有什么辦法能讓電腦獨立自動地用一條命令行運行第1,2,3...,10個模型嗎?

有的,可以使用bash for循環(huán)。首先,使用sys.argv來解析命令行參數(shù)。如果想要在命令行上重寫配置文件可以使用類如hydra的工具。

 
 
 
 
  1. import sys 
  2.       import joblib 
  3.              # df = ... 
  4.     
  5.              model_type = sys.argv[1] 
  6.       model_version = sys.argv[2] 
  7.       model_path =f'''model/model1/{model_type}/version_{model_version}''' 
  8.       print('Loading modelfrom', model_path, 'for training') 
  9.              model = joblib.load(model_path) 
  10.       mode.predict(df) 
  11. >>> python train.py XGBoost 1 
  12. Loading model from model/model1/XGBoost/version_1 for training 

腳本已經(jīng)被指令為使用模具第一版的XGBoost來預(yù)測命令行上的數(shù)據(jù)?,F(xiàn)在便能在不同版本的模具中使用bash for循環(huán)。如果能用Python使用for循環(huán),也可以在如下的終端上達成上述的目標。

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

敲擊Enter來分隔各行,輸出:

 
 
 
 
  1. Loading model from model/model1/XGBoost/version_1 for training 
  2. Loading model from model/model1/XGBoost/version_2 for training 
  3. Loading model from model/model1/XGBoost/version_3 for training 
  4. Loading model from model/model1/XGBoost/version_4 for training 

現(xiàn)在便可以讓腳本使用不同的模具來運行啦!

恭喜!現(xiàn)在你已經(jīng)學(xué)會如何一次自動地讀取和創(chuàng)造多個文件,如何用不同的參數(shù)運行一個文檔,過去丟在瑣碎工作中的時間可以利用起來做更重要的任務(wù)啦。


本文標題:告別無聊循環(huán)!Python幫你自動化處理文件
地址分享:http://www.5511xx.com/article/djhdcch.html