如何从文件名中删除tar.gz扩展名

时间:2017-08-17 14:15:46

标签: python python-3.x

我从文件名中删除扩展名时遇到问题。我试着用

os.path.splitext(checked_delivery)[0]

,但它只从文件名中删除.gz。我需要检查文件是否有扩展名,或者它是否是目录。我是这样做的:

os.path.exists(delivery)

但另一个问题是,我不能将其中的数据分开(YYYY.MM.DD)。我应该使用join()还是更有吸引力而不是大量的方法和ifs?

3 个答案:

答案 0 :(得分:0)

我提出以下小功能:

def strip_extension(fn: str, extensions=[".tar.bz2", ".tar.gz"]):
    for ext in extensions:
        if fn.endswith(ext):
            return fn[: -len(ext)]
    raise ValueError(f"Unexpected extension for filename: {fn}")

assert strip_extension("foo.tar.gz") == "foo"

答案 1 :(得分:0)

我提出了一个通用解决方案,使用 pathlib 模块从字符串中删除文件扩展名。 IMO,现在使用 os 来管理路径并不方便。

import pathlib


def remove_extention(path: pathlib.PosixPath) -> path.PosixPath:
    suffixes = ''.join(path.suffixes)
    return pathlib.Path(str(path).replace(suffixes, ''))

答案 2 :(得分:-2)

如果您知道扩展程序始终将成为.tar.gz,您仍然可以使用拆分:

In [1]: fname = 'RANDOM_FILE-2017.06.07.tar.gz'

In [2]: '.'.join(fname.split('.')[:-2])
Out[2]: 'RANDOM_FILE-2017.06.07'

来自os.path.splitext的文档字符串:

"Extension is everything from the last dot to the end, ignoring leading dots. "

在gzipped tarball的情况下,无论如何这都是有道理的,因为文件'FILE.tar.gz'是'FILE.tar'的gzip压缩版本,可能是由文件'FILE'制作的tarball

这就是为什么你需要使用os.path.splitext以外的东西,如果你需要的是原始文件名,没有.tar