繁体   English   中英

python fnmatch无法找到文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM