Python 如何从文件名中剪切tar.gz扩展名

Python 如何从文件名中剪切tar.gz扩展名,python,python-3.x,Python,Python 3.x,从文件名中删除扩展名时出现问题。我试着用 os.path.splitext(checked_delivery)[0] ,但它只从文件名中删除.gz。我需要检查文件是否有扩展名或它是一个目录。我是这样做的: os.path.exists(delivery) 但另一个问题是,我无法拆分它,因为其中包含数据YYYY.MM.DD。我应该使用join还是它更吸引人,而不是大量的方法和ifs?如果您知道扩展总是.tar.gz,您仍然可以使用split: In [1]: fname = 'RANDOM_F

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

os.path.splitext(checked_delivery)[0]
,但它只从文件名中删除.gz。我需要检查文件是否有扩展名或它是一个目录。我是这样做的:

os.path.exists(delivery)

但另一个问题是,我无法拆分它,因为其中包含数据YYYY.MM.DD。我应该使用join还是它更吸引人,而不是大量的方法和ifs?

如果您知道扩展总是.tar.gz,您仍然可以使用split:

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. "
在gzip压缩tarball的情况下,这是有意义的,因为文件'file.tar.gz'是'file.tar'的gzip版本,它可能是由文件'file'生成的tarball


这就是为什么您需要使用os.path.splitext以外的其他文件,如果您需要的是原始文件名,而不是.tar,那么我建议使用以下小函数:

def strip_extensionfn:str,extensions=[.tar.bz2,.tar.gz]: 对于ext-in扩展: 如果fn.endswithext: 返回fn[:-lenext] raise ValueErrorFun文件名的预期扩展名:{fn} 断言strip_extensionfoo.tar.gz==foo
我建议使用pathlib模块从字符串中删除文件扩展名。IMO表示,如今使用操作系统管理路径并不那么方便

import pathlib


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

你在检查它是否是一个目录吗?它可能是一个tar.gz文件,或者已经解包的目录可能是重复的,所以检查它是否是一个目录,如果不是->你的第二行。谢谢。是的,os.path.isdir…,然后使用上面的答案删除扩展名。为什么不使用fname.replace.tar.gz?不太可能在一个名字的中间,而且它不会杀死像YYYY.MM.DD这样的文件名中的其他点,如果它是一个DRIGIN,如果在NIX BaseNAM-S。TAR.GZ文件名。也许在切片之前,用endswith检查假设是否正确。