关于python:如何将文件路径+文件名放入列表中?

How to get file path + file name into a list?

本问题已经有最佳答案,请猛点这里访问。

我正在尝试获取包含文件路径和文件名的字符串列表。目前我只把文件名列在列表中。

代码:

1
hamFileNames = os.listdir("train_data\ham")

输出:

1
2
3
['0002.1999-12-13.farmer.ham.txt',
 '0003.1999-12-14.farmer.ham.txt',
 '0005.1999-12-14.farmer.ham.txt']

我想要一个类似这样的输出:

1
2
3
['train_data\ham\0002.1999-12-13.farmer.ham.txt',
 'train_data\ham\0003.1999-12-14.farmer.ham.txt',
 'train_data\ham\0005.1999-12-14.farmer.ham.txt']


由于您有权访问目录路径,因此可以执行以下操作:

1
2
dir ="train_data\ham"
output = map(lambda p: os.path.join(dir, p), os.listdir(dir))

或更简单

1
output = [os.path.join(dir, p) for p in os.listdir(dir)]

其中,os.path.join将把目录路径与其中的文件名连接起来。


如果您使用的是python 3.5或更高版本,请跳过os.listdir,而选择os.scandir,它不仅效率更高,而且可以为您工作(path是结果对象的一个属性):

1
hamFileNames = [entry.path for entry in os.scandir(r"train_data\ham")]

这还允许您以较低的成本筛选(scandir包括一些免费的文件信息,而不需要stat对文件进行筛选),例如只保留文件(没有目录或特殊的文件系统对象):

1
hamFileNames = [entry.path for entry in os.scandir(r"train_data\ham") if entry.is_file()]

如果您在3.4或更低版本上,您可能需要查看pypi scandir模块(它在早期的python上提供相同的API)。

另请注意:我使用了一个原始字符串作为路径;虽然\h碰巧不使用它,但您应该始终使用Windows路径文本的原始字符串,否则当您尝试使用"train_data\foo"时(其中\f是ASCII格式的提要字符),会受到严重的冲击,而r"train_data\foo"工作正常(因为r前缀preve除了引号字符以外的任何内容的反斜杠插值)。