【发布时间】:2016-12-03 00:23:23
【问题描述】:
我想读取一个目录中的文件。
目录包含:
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 开头的内容。但是我想要清楚地解释问题,如果你有任何建议?
标签: python file directory glob