python fnmatch无法找到该文件

时间:2013-03-14 17:39:26

标签: python regex csv

我有一个目录,其中包含许多子目录,每个子目录都有许多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的正则表达式吗?

2 个答案:

答案 0 :(得分: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块太宽了。花点时间缩小实际可能发生的错误。然后决定要忽略哪些以及哪些程序会导致程序崩溃。仔细查看此块中实际抛出的异常。你可能会在那里找到你的问题。

答案 1 :(得分: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)