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