簡體   English   中英

如何從文件名中剪切 tar.gz 擴展名

[英]How to cut tar.gz extension from filename

我在從文件名中刪除擴展名時遇到問題。 我試着用

os.path.splitext(checked_delivery)[0]

,但它只從文件名中刪除.gz 我需要檢查文件是否有擴展名或者它是一個目錄。 我是用這個做的:

os.path.exists(delivery)

但另一個問題是,我無法將其拆分為數據原因(YYYY.MM.DD)。 我應該使用join()還是它更有吸引力而不是大量的方法和 ifs?

我提出以下小功能:

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"

我提出了一個通用的解決方案,使用pathlib模塊從字符串中刪除文件擴展名。 IMO,現在使用os來管理路徑並不方便。

import pathlib


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

如果您知道擴展名始終是 .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 壓縮包的情況下,無論如何這是有道理的,因為文件 'FILE.tar.gz' 是 'FILE.tar' 的 gzipped 版本,它大概是由文件 'FILE' 制作的 tarball

這就是為什么你需要為此使用 os.path.splitext 以外的東西,如果你需要的是原始文件名,沒有 .tar

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM