私は1つのディレクトリにファイルを読み込みたい。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ファイルは返されません。
どのように私はこの第2条件を満たすことができます他の状態を失うことなく?
test.py ABC1は、ABC11.csvではなくABC1 _ *。csvを期待どおりに返します。ただし、質問テキストとは異なり、ABC1.csvは返されません。あなたのサンプルコードのバージョンが質問に合っていますか? –
@Jesper Freesbug-はい権利...(_)を削除すると、ABC1.csv、ABC11.csv、ABC11_1.csvとABC1で始まるすべてが返されます。しかし、私が望んでいるのは明らかに問題の説明です。 – kit