我正在尝试使用文件路径和文件名获取字符串列表。 目前我只将文件名放入列表中。
代码:
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']
答案 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
前缀可以防止除引号字符之外的任何内容的反斜杠插值。)