0

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

4

2 回答 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块对我来说有点太宽了。花点时间缩小实际可能发生的错误。然后决定哪些是你想忽略的,哪些应该让你的程序崩溃。仔细看看这个块中实际抛出的异常。你可能会在那里找到你的问题。
于 2013-03-14T17:50:12.430 回答
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)
于 2013-03-14T20:14:55.767 回答