如何将文件路径+文件名放入列表?

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

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

代码:

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

输出:

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

我想要类似这样的输出:

['train_data\ham[=12=]02.1999-12-13.farmer.ham.txt',
 'train_data\ham[=12=]03.1999-12-14.farmer.ham.txt',
 'train_data\ham[=12=]05.1999-12-14.farmer.ham.txt']

因为您可以访问目录路径,所以您可以这样做:

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

或更简单

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

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

如果您使用的是 Python 3.5 或更高版本,请跳过 os.listdir in favor of os.scandir,这既高效又能为您完成工作(path 是结果对象的属性):

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

这还可以让您以低廉的成本过滤(scandir 免费包含一些文件信息,而无需 stat-ing 文件),例如仅保留文件(无目录或特殊文件系统对象):

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 前缀防止除引号字符外的任何内容的反斜杠插值)。