檔案夾中有“0_10_00.csv”、“3_20_02.csv”、“1_00_00.csv”……還有一個名為“Ref.csv”的CSV檔案。在同一檔案夾中,有一個用于分析這些 CSV 檔案的 python 檔案“sample.py”。
“0_10_00.csv”表示這是自我開始實驗以來還剩 0 小時、10 分鐘和 0 秒時獲得的資料。同樣,“3_20_02.csv”表示這是自我開始實驗以來還剩 3 小時 20 分 2 秒時獲得的資料。
然后,為了一次分析這些資料,除了“Ref.csv”,我想使用 glob 獲取所有 CSV 檔案的名稱
import glob
files=glob.glob("\d_\d\d_\d\d\.csv")
print(files)
輸出:↓
[]
清單是空的。
如果我在下面這樣做,它似乎可以作業,但是我不想得到“Ref.csv”。
import glob
files=glob.glob("*.csv")
print(files)
輸出↓
['0_10_00.csv','3_20_02.csv','1_00_00.csv',......,'Ref.csv']
我希望它更具體,以便我只能獲取與“0_10_00.csv”具有相同名稱結構的 CSV 檔案。
uj5u.com熱心網友回復:
剛剛怎么樣[\d_] \.csv?
import re
items = ['0_10_00.csv','3_20_02.csv','1_00_00.csv',......,'Ref.csv']
[item for item in items if re.match(r'[\d_] \.csv', item)]
# ['0_10_00.csv', '3_20_02.csv', '1_00_00.csv']
如果這還不夠嚴格,我們可以這樣做\d_\d\d_\d\d\.csv:
>>> [item for item in items if re.match(r'\d_\d{2}_\d{2}\.csv', item)]
# ['0_10_00.csv', '3_20_02.csv', '1_00_00.csv']
isdigit或者您可以在替換不需要的內容后進行粗略檢查:
[item for item in ['0_10_00.csv','3_20_02.csv','1_00_00.csv','Ref.csv'] if item.replace('_','').replace('.csv','').isdigit()]
# ['0_10_00.csv', '3_20_02.csv', '1_00_00.csv']
uj5u.com熱心網友回復:
您可能需要使用 re 模塊使用正則運算式來獲得所需的輸出,這是一個使用它的示例:
import re
files = ['0_10_00.csv','3_20_02.csv','1_00_00.csv','sample.py','Ref.csv']
pattern = r"\d{1}_\d{2}_\d{2}.csv?"
filenames = []
for f in files:
if re.search(pattern, f):
filenames.append(f)
print(filenames)
輸出:['0_10_00.csv', '3_20_02.csv', '1_00_00.csv']
uj5u.com熱心網友回復:
如果你想使用 glob,你使用的模式需要看起來更像這樣:
import glob
files = glob.glob("[0-9]_[0-9][0-9]_[0-9][0-9].csv")
print(files)
輸出:
['1_00_00.csv', '3_20_02.csv', '0_10_00.csv']
正如其他人提到的那樣,glob 使用 shell 擴展而不是正則運算式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/469174.html
