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

时间:2017-11-02 00:56:44

标签: python directory-listing

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

代码:

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']

2 个答案:

答案 0 :(得分: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将使用其中的文件名加入目录路径。

答案 1 :(得分:0)

如果您使用的是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 - 文件),例如仅保留文件(没有目录或特殊文件系统对象):

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