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

2020-12-15 人工智慧遇見磐創

動機

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

循環訪問目錄中的文件如果不存在嵌套文件,創建它們使用bash for loop運行一個具有不同輸入的文件這些技巧為我在數據科學項目中節省了很多時間。我希望你也會發現它們有用!

循環訪問目錄中的文件

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

├── 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)當我們有3個以上的數據時,這是可以的,但不是有效的。如果我們在上面的腳本中只更改了數據,為什麼不使用for循環來訪問每個數據呢?

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

import osimport pandas as pddef loop_directory(directory: str): '''循環目錄中的文件''' 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) else: continueif __name__=='__main__': loop_directory('data/')data/data3.csvdata/data2.csvdata/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」)。

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

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

model├── model1│ ├── NaiveBayes│ └── XGBoost│ ├── version_1│ └── version_2└── model2 ├── NaiveBayes └── XGBoost ├── version_1 └── version_2對於我們創建的每個模型,手動創建一個嵌套文件可能需要很多時間。有沒有辦法讓這個過程自動化?是的,os.makedirs(datapath)。

def create_path_if_not_exists(datapath): '''如果不存在,則創建新文件並保存數據''' if not 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 joblibimport os def create_path_if_not_exists(datapath): '''如果不存在就創建''' if not os.path.exists(datapath): os.makedirs(datapath) if __name__=='__main__': # 創建目錄 model_path = 'model/model2/XGBoost/version_2' create_path_if_not_exists(model_path) # 保存 joblib.dump(model, model_path)Bash for Loop:使用不同的參數運行一個文件

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

import joblib# df = ...model_path = 'model/model1/XGBoost/version_1'model = joblib.load(model_path)model.predict(df)如果一個腳本需要很長時間才能運行,而我們有多個模型要運行,那麼等待腳本運行完畢然後運行下一個腳本將非常耗時。有沒有一種方法可以告訴計算機用一個命令行運行1,2,3,10,然後去做其他的事情。

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

import sysimport joblib# df = ...model_type = sys.argv[1]model_version = sys.argv[2]model_path = f'''model/model1/{model_type}/version_{model_version}'''print('Loading model from', model_path, 'for training')model = joblib.load(model_path)mode.predict(df)>>> python train.py XGBoost 1Loading model from model/model1/XGBoost/version_1 for training太好了!我們剛剛告訴我們的腳本使用模型XGBoost,version 1來預測命令行上的數據。現在我們可以使用bash循環遍歷模型的不同版本。

如果你可以使用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 trainingLoading model from model/model1/XGBoost/version_2 for trainingLoading model from model/model1/XGBoost/version_3 for trainingLoading model from model/model1/XGBoost/version_4 for training現在,你可以在使用不同模型運行腳本的同時執行其他操作!多方便啊!

結論

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

如果你對文章中的某些部分感到困惑,我在這個倉庫中創建了具體的例子:https://github.com/khuyentran1401/Data-science/tree/master/python/python_tricks

相關焦點

  • Python讀取ini配置文件
    目前是使用python來實現的,將代碼打包成了exe文件,方便客戶進行測試。下面說一下配置文件,本次直說ini格式的配置文件。創建ini文件在目錄中創建.ini文件,我們以config.ini文件名為例。進行創建。在創建好的文件內編寫配置信息。
  • 如何在Visual Studio創建python文件並運行
    工具Visual Studiopython環境截圖工具技術python在Visual Studio開發工具中,創建python項目,根據項目的需要,新建不同的python文件;然後選擇python文件,進行運行。
  • 如何在Visual Studio中創建excel並讀取數據
    和xlrd第三方庫,使用xlwt創建excel文件並寫入數據,使用xlrd讀取excel文件中的數據。創建python的django框架項目2、接著,新建python文件,導入xlrd和xlwt,配置文件編碼格式
  • python編程從入門到實踐:讀取整個文件和創建包含文件各行的內容
    1.python學習筆記:在文件編輯器中新建一個文件,寫幾句話來總結一下你至此學到的Python知識,其中每一行都以「In python you can」打頭。將這個文件命名為learning_python.txt,並將其存儲到為完成本章練習而編寫的程序所在的目錄中。
  • 用Python讀取Excel文件指南
    原作者丨Erik Marsja本文將重點闡述用Python如何讀取Excel文件(xlsx),重點是演示使用openpyxl模塊讀取xlsx類型的文件。首先,我們要看一些簡單的示例;然後,我們將學習讀取多個Excel文件。
  • Python創建可以打開文件的EXE
    >將python腳本轉化為exe程序比較常用的是兩個庫,py2exe和pyinstaller,由於前者不支持3.5及以上版本,操作也相對複雜,因此這裡選擇pyinstaller。其中第一種其實和在cmd_try文件夾下的命令行窗口中輸入python hello.py效果相同,所以我們可以用這個來測試,測試結束後再生成exe文件帶有參數的exe程序因為我們的exe程序需要能夠打開一個文件,所以需要調用外部參數。
  • Python數據分析:pandas讀取和寫入數據
    sep: str, 表示分隔符,分隔符號可以有多個,比如分隔符為"+,+"三個符號,則sep = '\+\,\+',即正則表達式 。read_csv默認分隔符為",",read_table默認為制表符"\t"。
  • python3 讀取XML文件的入坑經歷
    需要讀取xml裡的路徑,依次處理圖片所以,開始python xml文件的操作開始時使用命令行的形式,讀取xml文件的路徑,然後判斷文件是否存在,存在,就解析。 問題分析命令行參數傳錯了,xml_file_path = sys.argv[1],才是傳入的xml文件的路徑,如果是sys.argv[0],那麼,是執行的python文件本身!!所以,文件存在,但是,文件解析失敗!!並且是第一行第一列解析失敗!!,最後我把XML文件刪的只剩一行,依舊解析失敗!!開始懷疑人品了。文件編碼,怎麼改都不行!
  • 利用Python讀取外部數據文件
    >下圖是使用SAS打開的數據集,如果你的電腦中沒有安裝SAS,那你也可以通過Python實現數據的讀取。關於讀取SPSS數據文件,需要為您的Python安裝savReaderWriter模塊,該模塊可以到如下連結進行下載並安裝:https://pypi.python.org/pypi/savReaderWriter/3.4.2。
  • Java讀取和寫入txt文件
    程序從輸入流讀取數據,向輸出流寫入數據。Java是面向對象的程序語言,每一個數據流都是一個對象,它們提供了各種支持「讀入」與「寫入」操作的流類。那麼具體是怎麼進行操作的呢?3 解決方案首先我們要明白什麼是字符流和字節流。字節流也稱為原始數據,需要用戶讀入後進行相應的編碼轉換。
  • 小白學PyTorch | 17 TFrec文件的創建與讀取
    2 tfrec文件的內部結構 tfrec文件時tensorflow的數據集存儲格式,tensorflow可以高效的讀取和處理這些數據集,因此我見過有的數據集因為是tfrec文件,所以用TF讀取數據集,然後用pytorch訓練模型。
  • 用 Python 讀取資源文件?這個技巧保你漲姿勢
    但請注意,這裡我是直接運行的read.py這個文件。有一個笨辦法,就是獲取當前正在運行的這一行代碼所在的文件夾,然後拼出資源文件的完整路徑。如果你的 Python 版本不低於3.7,那麼你可以使用importlib.resources來快速讀取資源文件:from importlib import resourceswith resources.open_text
  • 一起學Python-外部文件的讀取方法
    認識open代碼既然要操作文件,所以我們需要用open代碼去打開一個文件,比如我們想要讀取一個txt文檔可以寫入一下代碼:f = open("u_info",mode="r",encoding="UTF-8")
  • 如何從excel中讀取多個工作表
    近期有學員學習《python文本分析:從入門到到精通》第四部分時,後臺問如果要處理的excel數據是含有多個sheet表,我們該怎麼處理。
  • 一文看懂Python對文件和文件夾的操作: 含os, shutil和glob模塊.Python學習面試必讀.
    在利用Python或Django從事Web開發時除了必須要了解Python面向對象的編程思想,還必須熟練掌握對文件夾和文件的操作。小編我精心準備了個小結,教你如何利用python進行基本的文件和文件夾操作,並重點介紹了如何使用os, shutil和glob模塊進行常見的文件和文件夾操作,如遍歷,刪除文件和查找文件。
  • Python 4 種不同的存取文件騷操作
    想到這種先保存再加載調用的過程,之前很多地方都遇到過呀,最簡單常用的就是python中文件的存取哇!於是乎,小詹夜觀星象,就著手整理記錄各種文件存取的騷操作,具體如下。(PS:雖然我知道技術文章太長,耐心看完的人很少,曝光率和點讚率會下降,更不會有什麼收益,但是還是想記錄下自己學習過程中的一些筆記,以後自己或者別人查起來方便些!)
  • 用Python複製文件的9個方法
    python 中有許多「開蓋即食」的模塊(比如 os,subprocess 和 shutil)以支持文件 I/O 操作。
  • 14-用Python 讀寫 Excel 文件
    和R這樣的分析工具了XlsxWriterxlrd&xlwt[2]OpenPyXL[3]Microsoft Excel API[4]介紹可以創建 Excel 2007 或更高版本的 XLSX 文件即 python-excel,含 xlrd、xlwt 和 xlutils 三大模塊,分別提供讀、寫和其他功能可以讀寫 Excel 2007 XLSX 和 XLSM 文件直接通過 COM
  • 文科生快速入門python(十三) | 文件讀寫詳解
    可見,使用python讀取一個文件的時候,相當於把這個文件從硬碟上,讀取到了內存中。我們如果想要操作這個文件,只有獲取這個文件對象後,才能夠真正的去操作這個文件,不管是讀取文件中的內容,還是向文件中寫入內容。
  • Python腳本4:根據txt文本,批量創建文件夾
    1000個標籤就需要創建1000個文件夾,文件夾裡面放入對應的圖像。不可能一個一個右擊創建文件夾,所以有了今天的腳本。根據txt文本每一行的類別,創建文件名為類別的文件夾。# 目標是讀取txt的每一行數據創建對應名字的文件夾# 1通過函數調用解決創建固定的文件夾# 2創建一個txt文件輸出裡面的內容輸出# 3將txt輸出內容和創建文件夾連結完成任務# 4後續補充檢測文本文件是否存在,不在報錯# 5後續補充如果已經有了文本中的文件夾跳過這個文件名創建下一個# 結束# 反思:目前創建的文件夾目錄固定、文本文檔位置固定# 完善功能:# 1.先把文件夾目錄改為交互式用戶設置