使用Python中的glob获取文件列表

10

我有一个包含csv文件的列表,它们都在mydir目录下。我想获取文件名列表,然而使用以下代码却返回了一个空列表。

import glob

mydir = "C:\Data"

file_list = glob(mydir + "*.csv")
print('file_list {}'.format(file_list))

1
尝试使用 glob.glob(mydir + "\*.csv") - PM 2Ring
3个回答

10

看起来你只需要在搜索时包含斜杠以在正确的目录中进行搜索。

import glob

mydir = "C:\Data"

file_list = glob.glob(mydir + "/*.csv") # Include slash or it will search in the wrong directory!!
print('file_list {}'.format(file_list))

3
尝试使用fnmatch
import os
from fnmatch import fnmatch

mydir = "C:/Data"
file_list = [file for file in os.listdir(mydir) if fnmatch(file, '*.csv')]

print('file_list {}'.format(file_list))

同时,使用正则表达式:

import os
import re

mydir = "C:/Data"
file_list = [file for file in os.listdir(mydir) if re.search('.*\.png', file)]  

print('file_list {}'.format(file_list))

顺便说一下,glob 是一个模块,你应该像这样使用 glob.glob()
from glob import glob

mydir = "C:/Data"

file_list = glob(mydir + "/*.csv")
print('file_list {}'.format(file_list))

1
你在文件名和目录之间缺少反斜杠。但是你不能以单个反斜杠结束字符串,因为它会认为你想要转义引号。你可以将其放在调用glob的函数中。(注意,你需要将两个字符串都设置为原始字符串,这是一个好习惯,以防你的目录以“n”或“t”开头,在这种情况下被解释为空格字符。):
import glob
mydir = r"C:\Data"
file_list = glob.glob(mydir + r"\*.csv")
print('file_list {}'.format(file_list))

你可能想尝试使用pylint来检查常见的错误或警告。它会为未转义的目录名称抛出警告。
更新:
事实上,我只会简化成这样:
import glob
file_list = glob.glob(r"C:\Data\*.csv")
print('file_list {}'.format(file_list))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接