我想要在一個目錄中讀取文件。如何在Python中使用glob模式讀取目錄中的文件?
目錄包含:
ABC1.csv
ABC1_1.csv
ABC1_2.csv
ABC11.csv
ABC11_1.csv
ABC11_3.csv
ABC11_2.csv
ABC13_4.csv
ABC13_1.csv
ABC17_6.csv
ABC17_2.csv
ABC17_4.csv
ABC17_8.csv
在運行腳本,我想給命令行參數讀取特定文件取決於一些條件:
- 如果用戶只給出ABC錯誤消息。
- 如果用戶給ABC1,那麼它只能讀取ABC1.csv,ABC1_1.csv和ABC1_2.csv。
- 如果用戶給ABC11,則它必須只讀取ABC11.csv,ABC11_1.csv,ABC11_2.csv,ABC11_3.csv。
- 如果用戶給ABC13,它必須只讀取ABC13_1.csv,ABC13_4.csv。
- 如果用戶給ABC17,那麼它只能讀ABC17_2.csv,ABC17_4.csv,ABC17_6.csv,ABC17_8.csv。
對於這個東西,我創建了一個腳本,但我面臨的問題。
計劃 -
from glob import glob
import os
import sys
file_pattern = ''
files_list = list()
arguments = {'ABC', 'PQR', 'XYZ'}
if len(sys.argv[1:2]) is 1:
file_pattern = str(sys.argv[1:2])
else:
print 'run as <python test.py ABC>'
sys.exit(1)
if file_pattern in arguments:
print '<Provide Name with some Number>'
sys.exit(1)
file_pattern = file_pattern.replace('[','').replace(']','').replace('\'','')
if file_pattern.startswith('ABC',0,3):
files_list = glob(os.path.join('<directory name>', str(file_pattern)+'_*.csv'))
else:
print 'No Such File --> ' + str(file_pattern)+ '\t <Provide appropriate Name>'
sys.exit(1)
if files_list:
for a_file in sorted(files_list):
print a_file
#process file
else:
print 'No Such File --> ' + str(file_pattern)+ '\t <Provide appropriate Name>'
sys.exit(1)
此代碼工作正常,但它不符合我的第二個條件。當用戶將ABC1作爲參數,即python test.py ABC1時,它將返回文件ABC1_1.csv,ABC1_2.csv但不返回ABC1.csv文件。
如何在不失去其他條件的情況下滿足第二條件?
我會說,像電話test.py ABC1不會像預期的那樣返回ABC11.csv,而是ABC1 _ *。csv。但是,與您的問題文本相反,它不會返回ABC1.csv。示例代碼的版本是否適合該問題? –
@Jesper Freesbug-是的正確...如果我們刪除(_),那麼它會返回ABC1.csv,ABC11.csv,ABC11_1.csv和所有以ABC1開頭的。但是,我想要清楚地解釋問題,如果您有任何建議嗎? – kit