AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 784570
Accepted
ImportanceLow7312
ImportanceLow7312
Asked: 2024-10-06 05:36:58 +0800 CST2024-10-06 05:36:58 +0800 CST 2024-10-06 05:36:58 +0800 CST

Obter caminho de arquivo exclusivo com sufixo numérico entre parênteses

  • 772

Estou procurando uma função que possa lidar com casos em que o caminho do arquivo de entrada já contém um sufixo numérico entre parênteses. A implementação atual da minha get_unique_pathfunção incrementa o sufixo numérico em um até encontrar um caminho que não existe. No entanto, essa abordagem falha quando o caminho do arquivo de entrada já contém um sufixo numérico.

Por exemplo, se o caminho do arquivo de entrada for example(1).txt, a função anexará incorretamente outro conjunto de parênteses e um número, resultando em example(1)(2).txt. Em vez disso, quero que a função verifique o caminho base para parênteses existentes e incremente o sufixo numérico de acordo.

Aqui está minha implementação atual:

def get_unique_path(file_path: str, extension: str) -> Optional[str]:
    base_path = os.path.splitext(file_path)[0]
    attempt = 1
    while True:
        path = f"{base_path}({attempt + 1}).{extension}"
        
        if not os.path.exists(path):
            return path
        
        attempt += 1

Gostaria de modificar esta função para lidar com casos em que o caminho do arquivo de entrada já contém um sufixo numérico entre parênteses. Alguém pode sugerir uma solução?

python
  • 2 2 respostas
  • 16 Views

2 respostas

  • Voted
  1. Best Answer
    larsks
    2024-10-06T06:27:33+08:002024-10-06T06:27:33+08:00

    O primeiro passo óbvio é verificar se o file_pathjá contém um número entre parênteses e removê-lo se tiver. Podemos usar o remódulo para executar essa operação.

    Uma implementação possível é:

    import re
    from pathlib import Path
    
    re_marker = re.compile(r"(?P<prefix>.*)\(\d+\)$")
    
    
    def get_unique_path(file_path: str | Path) -> str:
        file_path = Path(file_path)
        parent = file_path.parent
        base = file_path.stem
        if mo := re_marker.match(base):
            base = mo.group("prefix")
    
        count = 1
        while True:
            new_path = parent / f"{base}({count}){file_path.suffix}"
            if not new_path.exists():
                return str(new_path)
            count += 1
    

    Aqui estão alguns testes simples:

    >>> get_unique_path('/tmp/foo')
    '/tmp/foo(1)'
    >>> # create /tmp/foo(1)
    >>> open('/tmp/foo(1)', 'w').close()
    >>> # check again
    >>> get_unique_path('/tmp/foo')
    '/tmp/foo(2)'
    >>> # pass in a filename that already contains a number
    >>> get_unique_path('/tmp/foo(1)')
    '/tmp/foo(2)'
    
    • 1
  2. ImportanceLow7312
    2024-10-06T06:38:16+08:002024-10-06T06:38:16+08:00

    Para lidar com casos em que o caminho do arquivo de entrada já contém um sufixo numérico entre parênteses, você pode usar expressões regulares para extrair o caminho base e o sufixo numérico.

    Use re.search(r'(.*)\((\d+)\)(\.[^.]+)$', file_path)para corresponder ao caminho do arquivo de entrada. Em seguida, incremente o sufixo numérico e construa o novo caminho. Se nenhuma correspondência for encontrada, use a lógica original para anexar um sufixo numérico e incrementá-lo até que um caminho que não existe seja encontrado.

    if match:
        base_path = match.group(1)
        count = int(match.group(2))
        file_extension = match.group(3)
    
        ...
    else:
        ...
    
    • 0

relate perguntas

  • script sh para executar vários arquivos em vários idiomas

  • python2 e OpenSSL não funcionam juntos no Kali - como consertar?

  • Remova o padrão de lacuna dos arquivos [fechado]

  • Função Python add () de conjunto na compreensão da lista

  • Como obter a versão padrão de um aplicativo no unix

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve