【问题标题】:os.path.basename(file) vs file.split("/")[-1]os.path.basename(file) vs file.split(\"/\")[-1]
【发布时间】:2022-10-13 11:10:06
【问题描述】:

我需要从文件路径中提取seq_00034

    file = "/home/user/workspace/data/seq_00034.pkl"

我知道实现它的两种方法:

方法.A

    import os
    seq_name = os.path.basename(file).split(".")[0]

或者

方法B

    seq_name = file.split("/")[-1].split(".")[0]

哪个更安全/更快?

(考虑到import os的成本)

有没有更优雅的方法从给定路径中提取seq_name

【问题讨论】:

  • “更快”——你是否在一秒钟内进行数百万次这些操作?
  • 不,不是那些操作的数量。但我打算按照 Python 的禅宗找到“一种”方式来做到这一点
  • “Zen of Python”与性能和速度无关。
  • 你说的对。如果速度无关紧要,我不知道如何比较上述两种方法。附言。 pathlib.Path.stem() 的方式更容易理解。

标签: python-3.x os.path


【解决方案1】:

我认为更优雅的方法是使用 pathlib.Path.stem() 方法

import pathlib

filename =  "/home/user/workspace/data/seq_00034.pkl"
path = pathlib.Path(filename)

print(path.stem)

【讨论】:

    【解决方案2】:

    速度测试:

    import os
    import pathlib
    import time
    
    given_path = "/home/home/user/workspace/data/task_2022_02_xx_xx_xx_xx.pkl"
    
    time1 = time.time()
    for _ in range(10000):
        seq_name = given_path.split("/")[-1].split(".")[0]
    print(time.time()-time1, 'time of split')
    
    
    time2 = time.time()
    for _ in range(10000):
        seq_name = pathlib.Path(given_path).stem
    print(time.time()-time2, 'time of pathlib')
    
    
    time3 = time.time()
    for _ in range(10000):
        seq_name = os.path.basename(given_path).split(".")[0]
    print(time.time()-time3, 'time of os.path')
    

    结果(在我的电脑上)是:

    0.00339508056640625 time of split
    0.0355381965637207 time of pathlib
    0.005405426025390625 time of os.path
    

    事实证明split twiceos.path + split 快​​,它们都比使用pathlib 快得多

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-22
      • 1970-01-01
      • 2018-08-11
      • 1970-01-01
      • 2010-11-09
      • 1970-01-01
      相关资源
      最近更新 更多