每次有新檔案來到我們面前進行處理并將該值加載到檔案中時,我都想從檔案名中獲取一個子字串。這里的任務就像假設我們從 X 公司接收許多檔案進行清理程序,我們需要做的第一件事是從檔案名中獲取子字串。
例如:檔案名為“RV_NETWORK_AXN TECHNOLOGY_7737463273272635”。從這里我想取'AXN TECHNOLOGY'并想在同一個檔案中創建一個名為'COMPANY NAME'的新列并將'AXN TECHNOLOGY'值加載到其中。檔案名會改變,但公司名稱每次都會是在第二個下劃線之后。
uj5u.com熱心網友回復:
在評論中,您說使用df_1 = df_1.withColumn('COMPANY', F.split(F.input_file_name(), '_')[3])extracts AXN TECHMOLOGY.csv。
我會向你建議2個選項:
您可以再使用一個
split并\.使用element_at獲取倒數第二個元素。在這種情況下,分開\.作業和.不作業,因為split函式的這個引數不是一個簡單的字串,而是一個正則運算式模式;正則運算式中未轉義的點.具有“任何字符”的含義。df = df.withColumn( 'COMPANY', F.element_at(F.split(F.split(F.input_file_name(), '_')[3], '\.'), -2) )以下正則運算式模式將僅提取 3rd
_和潛在 4th之后的內容_,但不包括檔案擴展名(例如.csv)。df = df.withColumn( 'COMPANY', F.regexp_extract(F.input_file_name(), r'^. ?_.*?_.*?_([^_] )\w*\.\w $', 1) )
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/514441.html
