【问题标题】: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']

【问题讨论】:

    标签: python directory-listing


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

    【讨论】:

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

    【讨论】:

      猜你喜欢
      • 2020-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-17
      • 2012-08-27
      • 2016-05-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多