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

10 投票
3 回答
31854 浏览
提问于 2025-05-10 10:02

我在我的文件夹里有一堆csv文件。我想获取这些文件的名字。不过,下面用glob这个方法却返回了一个空列表。

import glob

mydir = "C:\Data"

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

相关文章:

  • 暂无相关问题
暂无标签

3 个回答

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))
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))

另外,可以使用正则表达式(RegEx):

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))
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))

撰写回答