Defina regras de nomes de arquivos para a equipe e verifique-os com Python
Defina uma convenção simples de nomes de arquivos para a equipe, teste-a em uma pasta sintética e gere um relatório de revisão sem renomear nem excluir nada. O verificador separa erros estruturais, datas inválidas e extensões não suportadas.
Conteúdo verificado 2026.09.20Inclui arquivos de exemplo
Ver o sumário
A tradução foi feita com IA. Confira o código, as unidades e os valores junto com o original. A revisão por falantes nativos de cada idioma ainda não foi concluída. English
Para quem éEste guia é voltado a equipes que querem nomes de arquivos previsíveis e uma verificação automática simples antes de compartilhar ou arquivar arquivos.
Preparação
Python 3.12 e um comando de terminal que inicie essa versão.
Uma pasta de trabalho em que os scripts possam criar pastas dentro de outputs.
Acordo sobre project codes, document labels, version format e allowed extensions que a equipe usará.
É necessária apenas a biblioteca padrão do Python: csv, datetime, pathlib e re.
01Escreva a convenção de nomes antes de escrever o verificador
Este exemplo usa o formato YYYYMMDD_project_document_vNN.ext. A date tem oito dígitos e deve ser uma data real do calendário. project e document usam letras minúsculas ou dígitos, opcionalmente separados por hífens. A version é v seguida de exatamente dois dígitos. As allowed extensions são pdf, docx, xlsx, csv e txt.
Use a data de trabalho relevante do arquivo como YYYYMMDD.
Use project e document tokens em minúsculas.
Use underscores apenas entre as quatro partes principais do filename.
Use v01, v02 e assim por diante para versions em vez de final, latest, new ou revised.
Mantenha a file extension original e restrinja-a a uma lista acordada.
02Crie uma pasta sintética com nomes válidos e inválidos
Os filenames a seguir são sintéticos e foram criados especificamente para este artigo. Salve o script de preparação como create_file_naming_demo.py. Ele cria oito arquivos vazios; quatro seguem a regra e quatro a violam deliberadamente.
python
from pathlib import Path
SOURCE = Path("outputs") / "file_naming_demo"
FILENAMES = [
"20260920_alpha_test-plan_v01.pdf",
"20260920_alpha_results_v02.csv",
"20260921_beta_meeting-notes_v03.txt",
"20261001_beta_budget_v01.xlsx",
"2026-09-20_alpha_notes_v01.txt",
"20260920_Alpha_notes_v01.txt",
"20260920_alpha_notes_final.txt",
"20260230_beta_results_v01.csv",
]
SOURCE.parent.mkdir(parents=True, exist_ok=True)
SOURCE.mkdir() # Stop if the synthetic source already exists.
for filename in FILENAMES:
target = SOURCE / filename
with target.open("xb"):
pass
Espera-se que os primeiros quatro names passem. O quinto usa uma hyphenated date em vez de YYYYMMDD. O sexto contém um uppercase project token. O sétimo usa final em vez de vNN. O oitavo tem a forma correta, mas contém a data impossível 2026-02-30.
03Classifique manualmente os oito nomes
Filename
Status esperado
Motivo
20260920_alpha_test-plan_v01.pdf
PASS
Corresponde à estrutura e a date é válida
20260920_alpha_results_v02.csv
PASS
Corresponde à estrutura e a date é válida
20260921_beta_meeting-notes_v03.txt
PASS
Corresponde à estrutura e a date é válida
20261001_beta_budget_v01.xlsx
PASS
Corresponde à estrutura e a date é válida
2026-09-20_alpha_notes_v01.txt
FAIL
STRUCTURE_ERROR
20260920_Alpha_notes_v01.txt
FAIL
STRUCTURE_ERROR
20260920_alpha_notes_final.txt
FAIL
STRUCTURE_ERROR
20260230_beta_results_v01.csv
FAIL
INVALID_DATE
Portanto, os totais esperados são 8 files checked, 4 passes e 4 failures. Três failures são structural, e um tem filename estruturalmente válido, mas uma calendar date inválida.
04Verifique filenames sem renomeá-los
Salve o script a seguir como check_file_names.py. Ele lê apenas filenames e grava um relatório CSV em uma output folder separada. Ele não renomeia, move, edita nem exclui nenhum source file.
python
import csv
import re
from datetime import datetime
from pathlib import Path
SOURCE = Path("outputs") / "file_naming_demo"
OUTPUT_DIR = Path("outputs") / "file_naming_result"
REPORT = OUTPUT_DIR / "file_naming_report.csv"
ALLOWED_EXTENSIONS = {"pdf", "docx", "xlsx", "csv", "txt"}
NAME_PATTERN = re.compile(
r"^(?P<date>[0-9]{8})_"
r"(?P<project>[a-z0-9]+(?:-[a-z0-9]+)*)_"
r"(?P<document>[a-z0-9]+(?:-[a-z0-9]+)*)_"
r"(?P<version>v[0-9]{2})\."
r"(?P<extension>[a-z0-9]+)$"
)
def check_filename(filename: str) -> tuple[str, str]:
match = NAME_PATTERN.fullmatch(filename)
if match is None:
return "FAIL", "STRUCTURE_ERROR"
extension = match.group("extension")
if extension not in ALLOWED_EXTENSIONS:
return "FAIL", "UNSUPPORTED_EXTENSION"
try:
datetime.strptime(match.group("date"), "%Y%m%d")
except ValueError:
return "FAIL", "INVALID_DATE"
return "PASS", ""
def main() -> None:
if not SOURCE.is_dir():
raise FileNotFoundError(f"Source folder not found: {SOURCE}")
if OUTPUT_DIR.exists():
raise FileExistsError(f"Output folder already exists: {OUTPUT_DIR}")
files = sorted(path for path in SOURCE.iterdir() if path.is_file())
results = []
for path in files:
status, issue = check_filename(path.name)
results.append({
"filename": path.name,
"status": status,
"issue": issue,
})
OUTPUT_DIR.parent.mkdir(parents=True, exist_ok=True)
OUTPUT_DIR.mkdir()
with REPORT.open("x", encoding="utf-8", newline="") as stream:
writer = csv.DictWriter(
stream,
fieldnames=["filename", "status", "issue"],
)
writer.writeheader()
writer.writerows(results)
passed = sum(row["status"] == "PASS" for row in results)
failed = len(results) - passed
print(f"Files checked: {len(results)}.")
print(f"Passed: {passed}; failed: {failed}.")
print(f"Report: {REPORT.as_posix()}")
if __name__ == "__main__":
main()
text
python check_file_names.py
05Compare o relatório esperado
O report deve conter uma linha para cada source file. Como os filenames são ordenados alfabeticamente antes da verificação, a output order segue os sorted names em vez da lista do setup script.
Contagem esperada
Valor
Files checked
8
PASS
4
FAIL
4
STRUCTURE_ERROR
3
INVALID_DATE
1
A saída esperada do console abaixo foi derivada manualmente a partir dos synthetic filenames e do checker. Não é um execution log capturado.
Confirme que todos os quatro valid names planejados recebem PASS.
Confirme que 20260230_beta_results_v01.csv é rejeitado mesmo que seu text shape corresponda à regex.
Decida quem tem permissão para renomear shared files antes de corrigir qualquer coisa.
Verifique links, scripts, CAD references, document references ou shared-drive shortcuts que possam depender dos filenames existentes.
Execute o checker novamente sem alterar OUTPUT_DIR. Ele deve parar com FileExistsError em vez de substituir o report anterior.
Problema
O que verificar
Muitos resultados STRUCTURE_ERROR
Confirme que a team rule escrita corresponde à naming practice que as pessoas realmente usam.
Uppercase ou spaces aparecem com frequência
Decida se deve proibi-los de forma consistente ou revisar a rule em vez de corrigir files de forma improvisada.
Uma date aparentemente válida falha
Verifique se o texto YYYYMMDD representa uma calendar date real.
Users continuam escrevendo final ou latest
Use version numbers explícitos e defina separadamente quando um file se torna approved ou released.
Renaming quebra references
Não automatize renaming até que dependent systems e links tenham sido avaliados.
07Mantenha as regras de nomes úteis, sem complicá-las demais
Uma filename convention não substitui proper version control, document management ou metadata. Um file chamado v03 não prova que seu content é mais recente do que v02, que foi aprovado pela pessoa correta ou que está vinculado ao project correto.
O exemplo verifica apenas files diretamente dentro de uma pasta. Ele não faz recursive scan de subfolders, não impõe uniqueness entre vários shared drives, não verifica file contents nem confirma se o project token corresponde a um project real.
Quando uma equipe muda sua convention, registre a effective date e decida se old files serão mantidos como estão ou renomeados. Uma rule prática deve ser estável o suficiente para ser lembrada pelas pessoas e rígida o suficiente para que automated checks produzam resultados úteis.
Registro de execução e verificação
2026-09-20 · exemplo verificado manualmente · alvo: Python 3.12 · biblioteca padrão: csv, datetime, pathlib, re · sem execução
Foram classificados manualmente 8 synthetic filenames como 4 valid e 4 invalid.
Foram identificadas três structural failures: hyphenated date, uppercase project token e final version label.
Foi confirmado por raciocínio de calendário que 2026-02-30 é inválida, mesmo que 20260230 corresponda à forma de oito dígitos.
Foram derivados manualmente os totais esperados de 4 PASS, 4 FAIL, 3 STRUCTURE_ERROR e 1 INVALID_DATE.
O script foi inspecionado quanto a full filename matching, allowed-extension checking, calendar-date validation, output collision protection e ausência de operações rename ou delete.
A saída esperada do console foi derivada manualmente.
Limites da verificação
O código não foi executado pelo autor desta resposta; nenhum file ou report foi criado.
Recursive folders, shared-drive links, case-insensitive filesystem behavior, cross-project uniqueness e dependent application references não foram testados.
A naming convention é um exemplo de team policy e deve ser alterada para se adequar ao workflow real.
As URLs da documentação oficial foram fornecidas com base em locais de documentação conhecidos, mas não foram verificadas ao vivo.
Em vez de parar em mais um resumo da reunião, separe o trabalho acordado dos itens em aberto. Transforme notas sintéticas de reunião em uma lista com responsáveis, prazos, entregáveis e evidências de conclusão, e escreva uma solicitação para IA que ajude na mesma tarefa.
Gerencie cada artigo como uma linha e separe redação, revisão, aprovação e publicação. Abrange importação de um CSV local, listas suspensas, filter views, permissões de compartilhamento e histórico de versões, além de configurar um fluxo para atualizar manualmente os arquivos do site após a aprovação.
Transforme release notes brutas em uma entrada de changelog que separe mudanças de ações obrigatórias do usuário e etapas de verificação. Uma atualização sintética de software mostra como tornar uma nota de versão útil para alguém que não fez a alteração.
Transforme notas de passagem de projeto em uma lista estruturada que registre o que precisa ser transferido, quem é responsável, onde está armazenado e o que permanece sem solução. Um pequeno exemplo sintético mostra como detectar responsáveis, locais e detalhes de pendências ausentes antes da passagem.