Este projeto implementa um sistema de linha de comando para organizar documentos digitais de uma biblioteca universitária. A proposta é reduzir o controle manual de arquivos, padronizando o armazenamento por tipo de documento e ano de publicação.
O sistema foi desenvolvido em Python e utiliza apenas recursos da biblioteca padrão, facilitando a execução em diferentes computadores sem instalação de dependências externas.
O objetivo do sistema é permitir o gerenciamento básico de documentos digitais pelo terminal. A aplicação trabalha com arquivos como artigos, teses, livros, relatórios e demais materiais acadêmicos em formatos como PDF, ePUB, TXT, Markdown, CSV e JSON.
As principais operações disponíveis são:
- cadastrar documentos digitais na biblioteca;
- listar documentos organizados por tipo e ano;
- criar documentos textuais;
- ler documentos textuais;
- abrir documentos no aplicativo padrão do sistema operacional;
- renomear documentos;
- remover documentos;
- criar, listar e remover diretórios internos.
Os arquivos são armazenados na pasta biblioteca/, seguindo a estrutura abaixo:
biblioteca/
├── pdf/
│ └── 2025/
│ └── artigo_operador_tecnico_ia_2025.pdf
├── epub/
│ └── 2023/
│ └── livro_digital.epub
└── txt/
└── 2025/
└── resumo_de_pesquisa.txt
| Funcionalidade | Situação | Descrição |
|---|---|---|
| Listar documentos | Implementada | Lista os documentos agrupados por extensão e ano de publicação. |
| Adicionar documento | Implementada | Copia um arquivo externo para a biblioteca sem apagar o arquivo original. |
| Criar documento textual | Implementada | Cria arquivos .txt, .md, .csv ou .json. |
| Ler documento | Implementada | Exibe o conteúdo de arquivos textuais e mostra um resumo para arquivos binários. |
| Abrir documento | Implementada | Abre o arquivo no aplicativo padrão do sistema operacional. |
| Renomear documento | Implementada | Renomeia um documento mantendo-o no mesmo diretório. |
| Remover documento | Implementada | Remove documentos armazenados na biblioteca. |
| Criar diretório | Implementada | Cria diretórios internos na pasta da biblioteca. |
| Listar diretórios | Implementada | Lista os diretórios existentes na estrutura da biblioteca. |
| Remover diretório | Implementada | Remove diretórios vazios ou com conteúdo, mediante confirmação. |
| Validação de caminhos | Implementada | Impede acesso indevido a arquivos fora da pasta da biblioteca. |
| Testes automatizados | Implementada | Valida as principais operações usando unittest e diretórios temporários. |
- Python 3.10 ou superior
- Biblioteca padrão do Python:
pathlibshutilwebbrowserdataclassesunittesttempfile
O projeto não depende de pacotes externos.
No terminal, dentro da pasta do projeto, execute:
python app.pyO sistema exibirá o menu principal:
1 - Listar documentos por tipo e ano
2 - Adicionar documento existente
3 - Criar documento textual
4 - Ler documento
5 - Abrir documento
6 - Renomear documento
7 - Remover documento
8 - Criar diretório
9 - Listar diretórios
10 - Remover diretório
0 - Sair
- Execute o sistema:
python app.py- Escolha a opção
3. - Informe os dados solicitados:
- título do documento;
- extensão;
- ano de publicação;
- conteúdo do documento.
- Digite
FIMpara encerrar a inserção do conteúdo.
Exemplo de resultado:
biblioteca/txt/2025/resumo_de_pesquisa.txt
- Execute o sistema:
python app.py- Escolha a opção
2. - Informe o caminho do arquivo de origem.
- Informe o ano de publicação.
- Informe um novo nome, caso queira salvar o arquivo com outro nome dentro da biblioteca.
Exemplo de origem:
exemplos/documentos_origem/artigo_operador_tecnico_ia_2025.pdf
Exemplo de destino criado pelo sistema:
biblioteca/pdf/2025/artigo_operador_tecnico_ia_2025.pdf
O arquivo original permanece na pasta de origem.
Para executar os testes automatizados, utilize:
python -m unittest discover -s tests -vResultado esperado:
Ran 10 tests
OK
Os testes usam diretórios temporários, por isso não alteram os documentos reais da pasta biblioteca/.
biblioteca_digital_python/
├── app.py
├── biblioteca_digital/
│ ├── __init__.py
│ ├── cli.py
│ └── library_manager.py
├── biblioteca/
│ └── .gitkeep
├── docs/
│ ├── MANUAL_USUARIO.md
│ ├── PLANO_GIT_GITHUB.md
│ └── RELATORIO_TESTES_FEEDBACK.md
├── exemplos/
│ └── documentos_origem/
├── tests/
│ └── test_library_manager.py
├── .github/
│ └── pull_request_template.md
├── .gitignore
├── CONTRIBUTING.md
└── README.md
Optei por separar a regra de negócio da interface de linha de comando. A classe DigitalLibrary, no arquivo library_manager.py, concentra as operações principais do sistema. O arquivo cli.py fica responsável apenas pela interação com o usuário.
Essa separação facilita a manutenção do projeto e permite testar as regras principais sem depender do menu interativo.
A manipulação de caminhos foi feita com pathlib, pois esse recurso deixa o código mais legível e funciona bem em Windows, Linux e macOS.
Ao adicionar ou criar documentos, o sistema organiza os arquivos no formato:
tipo/ano/nome_do_arquivo
Exemplo:
biblioteca/pdf/2025/artigo_operador_tecnico_ia_2025.pdf
Incluí uma validação para impedir que caminhos externos sejam manipulados pelo sistema. Com isso, entradas como ../arquivo.txt são bloqueadas, evitando alterações fora da pasta biblioteca/.
A escolha por não usar pacotes externos foi feita para simplificar a execução do projeto e reduzir problemas de ambiente durante a avaliação.
Além deste README, o projeto contém os seguintes documentos:
docs/MANUAL_USUARIO.md: instruções de uso do sistema;docs/RELATORIO_TESTES_FEEDBACK.md: registro dos testes e dos feedbacks considerados;docs/PLANO_GIT_GITHUB.md: registro do uso de Git e GitHub no projeto;CONTRIBUTING.md: orientações para commits, branches e pull requests.
Projeto acadêmico desenvolvido por Armando de Souza Stein para a atividade Hora da Prática 2 da disciplina Programação para Ciência de Dados.