如何将文件路径+文件名放入列表中? [复制]

Posted

技术标签:

【中文标题】如何将文件路径+文件名放入列表中? [复制]【英文标题】:How to get file path + file name into a list? [duplicate] 【发布时间】:2018-04-14 10:11:01 【问题描述】:

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

代码:

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\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】:

由于您可以访问目录路径,因此您可以这样做:

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 将加入您的目录路径,其中包含文件名。

【讨论】:

另见***.com/a/11058554/8586227。【参考方案2】:

如果您使用的是 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 前缀可以防止除引号字符之外的任何反斜杠插值)。

【讨论】:

以上是关于如何将文件路径+文件名放入列表中? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

我可以创建从网络上的UNC路径复制文件的安装程序吗?

遍历文件时,如何将每个文件名附加到列表中? [复制]

如何使用 lua 读取文件夹名称并将它们放入表列表中

如何将长文本文件字段放入列表框?

如何告诉 clang 将调试符号放入可执行二进制文件中? [复制]

如果该文件夹不存在,如何通过创建文件夹将文件从一个目录复制到另一个目录