Como criar uma pasta específica de acordo com os metadados inseridos

23 views
Skip to first unread message

NPazos

unread,
Oct 12, 2021, 12:02:25 PM10/12/21
to Python Brasil
Olá pessoal, 

Sou novato no "mundo python", estou estudando e criando meus primeiros códigos em python, utilizando como IDE, o pycharm.

Estou criando um sistema para armazenar dados e conforme insiro os metadados, as pastas são criadas (de acordo com os metadados inseridos) para organização e estruturação das pasta.

Como exemplo tenho os seguintes dados que são lidos em meu formulário:

nome_empresa
local_empresa
setor_empresa

Como gravar o arquivo para que seja criada a pasta /nome_empresa/local_empresa/setor_empresa  ?

Como escrevo em python, cada que cada vez que preencher meu formulário, ele buscar essas informações e criar as pasta para armazenar os dados ?

Peço ajuda e agradeço a qualquer informação ou sugestão dada.





Antonio Ennio de Jesus

unread,
Oct 12, 2021, 6:16:39 PM10/12/21
to python...@googlegroups.com
Olá, boa noite, só para eu entender, porque não escolhe um banco de dados e armazena tudo lá ? 
Se for armazenar dados individuais em pastas , é possível , mas , vai ser uma não de obra , e a finalidade de pastas e guardar arquivos e não , dados . Se puder explicar melhor o porquê ? Talvez possamos lhe direcionar para uma solução.


Em ter, 12 12e out 12e 2021 às 13:02, NPazos
--
--
------------------------------------
Grupo Python-Brasil
https://wiki.python.org.br/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com
---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/python-brasil/c1afda2d-9080-43ef-b5fd-28e3c6d63e83n%40googlegroups.com.

Marcelo Valle

unread,
Oct 13, 2021, 9:53:39 AM10/13/21
to Python Brasil
  1. receba os dados do seu formulario e coloque em variaveis
  2. crie uma string `path_arquivo` usando essa variaveis , exemplo: `f"/{nome_empresa}/{local_empresa}/{setor_empresa}/nome_arquivo"`
  3. Use a função nativa `open` do python para gravar o novo arquivo em `path_arquivo`


Nicolas Pazos

unread,
Oct 18, 2021, 1:21:45 PM10/18/21
to python...@googlegroups.com
Pessoal, obrigado pelo retorno.

Na verdade acho que me expressei mal e não consegui explicar exatamente o que quero fazer.

Seguinte, o que quero fazer é um sistema em que cada registro inserido no sistema, armazene também um arquivo em pdf. 

A parte que me falta e não estou conseguindo fazer é guardar o pdf em uma pasta (específica), de acordo com os metadados que estão sendo inseridos, conforme exemplo abaixo.

Exemplo: (Models.py)

 class Registro(models.Model):
    cod_arquivo = models.CharField(max_length=8)
    titulo = models.CharField(max_length=40)
    descricao = models.TextField(blank=True)
    tipodoc = models.ForeignKey(Tipodocumento, on_delete=models.DO_NOTHING)
    setor = models.ForeignKey(Setor, on_delete=models.DO_NOTHING)
    cod_empresa = models.ForeignKey(Empresa, on_delete=models.DO_NOTHING)
    data_criacao = models.CharField(max_length=10)
    local_origem = models.CharField(max_length=40)
    local_guarda = models.CharField(max_length=40)
    data_registro = models.DateTimeField(auto_now_add=True)
    arquivo = models.FileField(upload_to=' ')       #Local/pasta onde estara armazenado o arquivo
    user = models.ForeignKey(User, on_delete=models.DO_NOTHING)


O que quero fazer é pegar a informação da empresa (codigo), setor (setor da empresa) e fazer com que o sistema crie a pasta (empresa) e subpasta (setor), caso não exista, e salve o arquivo nesse caminho, como exemplo:

cod_empresa = 007 
setor = financeiro

Exemplo caminho a salvar arquivo:  /basedados/007/financeiro/exemplo.pdf

Como faço para que o sistema pegue essas informações na hora de inserir/salvar o registro e crie(caso não existe) esse caminho para salvar o arquivo ?

Espero com isso ter sido claro com o que preciso.

Grande abraço a todos.  














 






Marcelo Valle

unread,
Oct 19, 2021, 8:24:43 AM10/19/21
to Python Brasil
Nicolas, ainda não está claro pra mim se sua dificuldade é formar o caminho do arquivo ou como salvar em pdf. 
Eu tinha respondido na minha última mensagem como formar o caminho do arquivo. 
Segue abaixo um código python pra ficar mais claro. 
Se ainda restarem dúvidas, pergunte de novo.

cod_empresa = "007"
setor = "financeiro"

path_pdf = f"/basedados/{cod_empresa}/{setor}/exemplo.pdf"

# Forma alternativa, que funciona no windows tbm:
import os
path_pdf = os.path.join(os.path.abspath(os.sep), "basedados", cod_empresa, setor, "exemplo.pdf")

# >>> path_pdf
# '/basedados/007/financeiro/exemplo.pdf'

Nicolas Pazos

unread,
Oct 19, 2021, 8:57:47 AM10/19/21
to python...@googlegroups.com
Marcelo, acho que não estou sabendo explicar o que estou precisando de fato.

Me perdoe, mais uma vez, mas sou novato no mundo Python.

O que quero fazer é pegar 2 metadados (empresa, setor) que são uma caixa de texto (foreign keys) e na hora de salvar o registro pegar essas informações e utilizar para criar (se não existir) o caminho para salvar o arquivo (pdf) do registro.

Sei fazer isso com uma pasta estática, agora quando depende do metadado do próprio registro é que não sei como fazer.

Como e onde faço isso no meu código, pois aprendi fazer isso utilizando o "models.FileField(upload_to)", mas me parece que só funciona com o caminho estático. 


image.png

 Mais uma vez agradeço a quem puder ajudar e me perdoem pela falta de conhecimento no assunto.

Abraços

Marcelo Valle

unread,
Oct 19, 2021, 11:09:10 AM10/19/21
to Python Brasil
ah, você está querendo fazer um `mkdir -p`, normalmente usado no shell, soh que em python? Dado um caminho, criar todas as pastas não existentes para assegurar que o caminho inteiro exista?

Se for isso, voce pode usar `os.makedirs`: https://www.geeksforgeeks.org/python-os-makedirs-method/

Era isso? Exemplo abaixo.

$ ls /tmp/test

$ python3

Python 3.9.6 (default, Jun 29 2021, 05:25:02) 

[Clang 12.0.5 (clang-1205.0.22.9)] on darwin

Type "help", "copyright", "credits" or "license" for more information.

>>> import os

>>> os.makedirs("/tmp/test/folder1/folder2/folder3/f")

>>> 

$ ls /tmp/test/

folder1 

$ find /tmp/test/

/tmp/test/

/tmp/test//folder1

/tmp/test//folder1/folder2

/tmp/test//folder1/folder2/folder3

/tmp/test//folder1/folder2/folder3/f

$ 


--
--
------------------------------------
Grupo Python-Brasil
https://wiki.python.org.br/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com
---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.

Alfredo Miranda

unread,
Oct 19, 2021, 11:30:19 AM10/19/21
to python...@googlegroups.com
Na verdade Marcelo, acho que o Nicolas estava perguntando era sobre como fazer o upload para uma pasta baseado nos outros dados que vem na request.

Se entendi bem, acho que essa resposta no StackOverflow pode ajudar https://stackoverflow.com/a/50591723 .

E se esse for o caso, o conteúdo que o Marcelo passou também pode ajudar, já que além de retornar onde vai ser armazenado o arquivo, vai ter que garantir que aquele caminho existe.



--
Alfredo Miranda
Graduado em Engenharia de Computação - IFCE
Reply all
Reply to author
Forward
0 new messages