與僅打開檔案名中包含過去 7 天日期的檔案的主題類似,我只想打開那些在命名方面遵循非常嚴格的規則的檔案,并提取檔案名的一部分以進行日期比較。
我的檔案名是這樣構建的
{Custom-prefix}_{SupplierName}_{8 digtit_date}.csv
an example:
myprefix_Shop_no24_20221009.csv
因此供應商名稱中可以包含下劃線。但是字串的每個部分也用下劃線分隔。
我確實有完整的 for 串列,{SupplierName}但這可能會隨著時間的推移而改變,我想避免使用硬編碼的解決方案。可以有數字,{SupplierName}它們有不同的長度,包括“_”。
我試過這個:
prefix = "Custom-prefix"
pattern = re.compile(fr"(?<={prefix})([a-zA-Z0-9_]*)([0-9]{8})(?=\.csv)")
# I get the filenames via os.walk
matched = pattern.search(filname)
但這似乎與“CustomPrefix”和“.csv”之間的所有內容相匹配。
pattern = re.compile(fr"(?<={prefix})([a-zA-Z0-9_]*)(?=\.csv)")
給了我完全相同的結果。我理解這一點的方式,我必須讓正則運算式知道,它必須匹配字串的各個部分并尊重下劃線。這樣我的每組檔案名:
myprefix
_
Shop_no24
_
20221009
.csv
得到認可。我在這里找到了與名稱中的下劃線匹配的解決方案,但不幸的是,我自己無法獲取正則運算式并在之后匹配找到的組以進行日期比較。
先感謝您
uj5u.com熱心網友回復:
您可以使用
pattern = re.compile(fr"{prefix}_(\w*)_(\d{{4}})(\d{{2}})(\d{{2}})\.csv")
請注意 f 字串文字中的雙轉義文字大括號。
請參閱Python 演示:
import re
filename = "Custom-prefix_Shop_no24_20221009.csv"
prefix = "Custom-prefix"
pattern = re.compile(fr"{prefix}_(\w*)_(\d{{4}})(\d{{2}})(\d{{2}})\.csv")
matched = pattern.search(filename)
if matched:
supplier, year, month, day = matched.groups()
print(f'supplier={supplier}, year={year}, month={month}, day={day}')
輸出:
supplier=Shop_no24, year=2022, month=10, day=09
使用(\d{4})(\d{2})(\d{2})部分,您可以將所有日期部分捕獲到單獨的組中,以便您可以隨意操作它們。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/525931.html
上一篇:正則運算式字串沒有產生預期的結果
