成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

讀取、創建和運行多個文件的3個Python技巧

開發 后端
將代碼投入生產時,你很可能需要處理代碼文件的組織。讀取、創建和運行許多數據文件非常耗時。本文將向你展示如何自動

 讀取、創建和運行多個文件的3個Python技巧

 

動機

將代碼投入生產時,你很可能需要處理代碼文件的組織。讀取、創建和運行許多數據文件非常耗時。本文將向你展示如何自動

  • 循環訪問目錄中的文件
  • 如果不存在嵌套文件,創建它們
  • 使用bash for loop運行一個具有不同輸入的文件

這些技巧為我在數據科學項目中節省了很多時間。我希望你也會發現它們有用!

循環訪問目錄中的文件

如果我們要像這樣讀取和處理多個數據:

 

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

 

我們可以嘗試一次手動讀取一個文件

 

  1. import pandas as pd  
  2.  
  3. def process_data(df): 
  4.    pass 
  5.  
  6. df = pd.read_csv(data1.csv) 
  7. process_data(df) 
  8.  
  9. df2 = pd.read_csv(data2.csv) 
  10. process_data(df2) 
  11.  
  12. df3 = pd.read_csv(data3.csv) 
  13. process_data(df3) 

 

當我們有3個以上的數據時,這是可以的,但不是有效的。如果我們在上面的腳本中只更改了數據,為什么不使用for循環來訪問每個數據呢?

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

 

  1. import os 
  2. import pandas as pd 
  3. def loop_directory(directory: str): 
  4.     '''循環目錄中的文件''' 
  5.  
  6.     for filename in os.listdir(directory): 
  7.         if filename.endswith(".csv"): 
  8.             file_directory = os.path.join(directory, filename) 
  9.             print(file_directory) 
  10.             pd.read_csv(file_directory) 
  11.         else
  12.             continue 
  13.  
  14. if __name__=='__main__'
  15.     loop_directory('data/'
  1. data/data3.csv 
  2. data/data2.csv 
  3. 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”來指定特定的特征工程。

在使用模型1時,我們可能需要使用不同類型的機器學習模型來訓練我們的數據(“model1/XGBoost”)。

在使用每個機器學習模型時,我們甚至可能希望保存模型的不同版本,因為模型使用的超參數不同。

因此,我們的模型目錄看起來像下面這樣復雜

 

  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 

 

對于我們創建的每個模型,手動創建一個嵌套文件可能需要很多時間。有沒有辦法讓這個過程自動化?是的,os.makedirs(datapath)。

 

  1. def create_path_if_not_exists(datapath): 
  2.     '''如果不存在,則創建新文件并保存數據''' 
  3.  
  4.     if not os.path.exists(datapath): 
  5.         os.makedirs(datapath)  
  6.  
  7. if __name__=='__main__'
  8. create_path_if_not_exists('model/model1/XGBoost/version_1'

 

運行上面的文件,你應該會看到嵌套文件'model/model2/XGBoost/version_2'自動創建!

現在你可以將模型或數據保存到新目錄中!

 

  1. import joblib 
  2. import os  
  3.  
  4. def create_path_if_not_exists(datapath): 
  5.     '''如果不存在就創建''' 
  6.  
  7.     if not os.path.exists(datapath): 
  8.         os.makedirs(datapath)  
  9.  
  10. if __name__=='__main__'
  11.  
  12.   # 創建目錄 
  13.   model_path = 'model/model2/XGBoost/version_2' 
  14.   create_path_if_not_exists(model_path) 
  15.  
  16.   # 保存 
  17.   joblib.dump(model, model_path) 

 

Bash for Loop:使用不同的參數運行一個文件

如果我們想用不同的參數運行一個文件呢?例如,我們可能希望使用相同的腳本來使用不同的模型來預測數據。

 

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

 

如果一個腳本需要很長時間才能運行,而我們有多個模型要運行,那么等待腳本運行完畢然后運行下一個腳本將非常耗時。有沒有一種方法可以告訴計算機用一個命令行運行1,2,3,10,然后去做其他的事情。

是的,我們可以用for bash for loop。首先,我們使用系統argv使我們能夠解析命令行參數。如果要覆蓋命令行上的配置文件,也可以使用hydra等工具。

 

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

 

 

  1. >>> python train.py XGBoost 1 
  2. Loading model from model/model1/XGBoost/version_1 for training 

太好了!我們剛剛告訴我們的腳本使用模型XGBoost,version 1來預測命令行上的數據。現在我們可以使用bash循環遍歷模型的不同版本。

如果你可以使用Python執行for循環,那么也可以在下面這樣的終端上執行

 

  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 

 

現在,你可以在使用不同模型運行腳本的同時執行其他操作!多方便啊!

結論

祝賀你!你剛剛學習了如何同時自動讀取和創建多個文件。你還學習了如何使用不同的參數運行一個文件。手動讀、寫和運行文件的時間現在可以節省下來,用于更重要的任務。

責任編輯:華軒 來源: 今日頭條
相關推薦

2020-09-05 16:35:20

AndroidPython軟件開發

2019-10-11 10:22:36

Linux命令

2024-10-14 17:13:48

模塊Python編程

2021-06-26 16:05:15

內核線程運行

2021-02-23 10:48:30

Python代碼開發

2011-04-12 09:53:32

Spring

2024-06-24 13:35:48

2010-08-02 17:24:25

NFS目錄

2010-07-05 11:14:32

2010-08-05 13:23:05

NFS協議

2024-10-08 10:24:41

Python編程語言

2021-02-18 17:00:52

Linux歸檔文件

2024-06-04 12:37:18

2024-08-26 14:42:04

Python目錄管理

2010-02-03 10:45:33

2011-07-13 15:45:45

域控制器

2019-09-16 11:40:49

Linux交換文件

2021-04-24 06:26:43

SigilLinux EPUB文件

2022-09-21 23:29:15

Python點云數據

2024-04-29 06:50:45

Python代碼運行
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品免费视频 | 国产精品视频区 | 日本成人免费网站 | 日韩在线观看网站 | 一区二区国产精品 | 色吊丝在线 | 久久久久久久久精 | 91麻豆精品一区二区三区 | 国产精品色 | 一区二区亚洲 | 一区二区三区四区免费在线观看 | 日本韩国电影免费观看 | 欧美日韩在线精品 | 国产高清视频一区二区 | 欧美a在线| 成人精品一区二区三区中文字幕 | 久久久久国产一区二区三区四区 | 国产成人在线观看免费 | 91精品国产一二三 | 中文字幕在线观看视频一区 | av天天干 | 日韩欧美中文 | 久久久人成影片一区二区三区 | 亚洲美女一区二区三区 | 色视频在线观看 | 色婷婷av777| 欧美综合久久 | 欧美日韩国产一区二区三区 | 天天爽天天操 | 亚洲精品在线视频 | 免费国产视频 | 99精品网| 国产97久久 | 九九热精品视频 | 国产精品亚洲视频 | 国产日韩91 | 久久伊人操 | 6996成人影院网在线播放 | 91成人午夜性a一级毛片 | 亚洲最大福利网 | 亚洲视频a|