python fnmatch 无法找到文件
我有一个文件夹,里面有很多子文件夹,每个子文件夹里都有很多csv文件,但我只对某些特定的csv文件感兴趣。所以我写了下面这个Python方法,但我无法获取到文件名。如果我用*.csv,它会找到所有的文件,但我并不想读取所有的文件:
def gatherStats(template_file, csv_file):
for lang in getLanguageCodes(csv_file):
lang_dir = os.path.join(template_file, lang)
try:
for file in os.listdir(lang_dir):
if fnmatch.fnmatch(file, '*-*-template-users-data.csv'):
t_file = open(file, 'rb').read()
reader = csv.reader()
for row in reader:
print row
else:
print "didn't find the file"
except Exception, e:
logging.exception(e)
我这里做错了什么呢?是正则表达式的问题吗?我们可以在fnmatch中使用正则表达式吗?
2 个回答
1
你的代码有几个问题。先把这些问题解决了,然后我们再来看看你真正遇到的是什么问题。
- 首先,不要把内置的名称当作变量,比如说
file
。可以把它换成filename
。 然后在打开文件之前,使用
os.path.join(lang_dir, filename)
。这意味着:t_file = open(os.path.join(lang_dir, filename), 'rb').read()
如果你在这一行没有提到你打开的文件对象,
reader = csv.reader()
怎么能读取你的文件呢?- 你的
try
/except
代码块范围有点大。慢慢来,缩小一下可能出现的错误范围。然后决定哪些错误你想忽略,哪些错误应该让程序崩溃。仔细看看这个代码块中实际抛出的异常。你可能会在这里找到你的问题。
0
在另一位用户的帮助下,我成功解决了这个问题。我把这个答案放在这里,方便以后大家参考。
def gatherStats(template_file, csv_file):
for lang in getLanguageCodes(csv_file):
lang_dir = os.path.join(template_file, lang)
try:
for filename in os.listdir(lang_dir):
path = os.path.join(lang_dir, filename)
if re.search(r'-.+-template-users-data.csv$',filename):
with open(path, 'rb') as template_user_data_file:
reader = csv.reader(template_user_data_file)
try:
for row in reader:
print row
except csv.ERROR as e:
logging.error(e)
else:
print "didn't find the file"
except Exception, e:
logging.exception(e)