[英]Python os.walk/fnmatch.filter does not find file when in file's current directory
[英]python fnmatch unable to find the file
我有一个包含一堆子目录的目录,每个子目录都有许多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)
我在这里做错了什么? 是正则表达式问题吗? 我们可以对fnmath使用正则表达式吗?
您的代码有几个问题。 首先修复它们,然后我们可能会深入了解您的问题所在。
file
。 而是将其替换为filename
。 然后在打开文件之前先使用os.path.join(lang_dir, filename)
。 含义:
t_file = open(os.path.join(lang_dir, filename), 'rb').read()
如果您在此行中未引用打开的文件对象,您如何期望reader = csv.reader()
读取文件?
try
/ except
区隔对于我的口味来说有点过宽。 花些时间来缩小实际可能发生的错误。 然后决定要忽略其中的哪些,并使程序崩溃。 仔细查看此块中实际抛出的异常。 您可能会在那找到问题。 在其他用户提供的帮助下,我设法解决了该问题。 我将此答案放在此处,以供社区将来参考。
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.