Criar e guardar ficheiros num novo directório em Python

O negócio

As secções seguintes explicam como criar e guardar um novo ficheiro em Python utilizando um novo directório (pasta) como destino.

  • Erro ao especificar um directório inexistente com open()(FileNotFoundError)
  • os.makedirs()Criar um directório
  • Exemplo de código para criar um novo ficheiro com um destino

O seguinte é um exemplo de um ficheiro de texto.

Ao armazenar imagens, depende da biblioteca se se pode especificar um caminho que inclua um directório inexistente (ou se irá criar automaticamente um se não existir).
FileNotFoundErrorSe este erro ocorrer, pode criar um novo directório com os.madeirs() antes de executar a função para guardar, como no exemplo seguinte.

Erro ao especificar um directório inexistente com open()(FileNotFoundError)

Ao criar um novo ficheiro com a função built-in open(), ocorre um erro se um caminho contendo um novo directório (um directório que não existe) for especificado como o primeiro argumento como o destino.(FileNotFoundError)

open('not_exist_dir/new_file.txt', 'w')
# FileNotFoundError

O primeiro argumento de open() pode ser um caminho absoluto ou um caminho relativo ao directório actual.

Para a utilização básica de open(), como a criação de um novo ficheiro num directório existente, ou a sobreposição ou anexação a um ficheiro existente, consultar o artigo seguinte.

Criar um directório(os.makedirs())

Ao criar um novo ficheiro num directório inexistente, é necessário criar o directório antes de abrir().

Se estiver a usar Python 3.2 ou posterior, é conveniente usar os.makedirs() com o argumento exist_ok=True. Mesmo que o directório alvo já exista, não ocorrerá qualquer erro e o directório pode ser criado de uma só vez.

import os

os.makedirs(new_dir_path, exist_ok=True)

Se tiver uma versão mais antiga de Python e não tiver o argumento existe_ok em os.makedirs(), receberá um erro se especificar o caminho para um directório que existe, portanto use os.path.exists() para verificar primeiro a existência do directório.

if not os.path.exists(new_dir_path):
    os.makedirs(new_dir_path)

Ver o artigo seguinte para mais detalhes.

Exemplo de código para criar um novo ficheiro com um destino

O seguinte é um exemplo de código de uma função que cria e guarda um novo ficheiro especificando o directório de destino.

O primeiro argumento dir_path é o caminho do directório de destino, o segundo argumento filename é o nome do novo ficheiro a ser criado, e o terceiro argumento file_content é o conteúdo a ser escrito, cada um especificado como uma string.

Se o directório especificado não existir, criar um novo directório.

import os

def save_file_at_dir(dir_path, filename, file_content, mode='w'):
    os.makedirs(dir_path, exist_ok=True)
    with open(os.path.join(dir_path, filename), mode) as f:
        f.write(file_content)

Utilizar como se segue.

save_file_at_dir('new_dir/sub_dir', 'new_file.txt', 'new text')

Neste caso, o ficheiro new_file.txt com o conteúdo “novo texto” será criado em new_dir\sub_dir. Por outras palavras, o ficheiro seguinte será criado de novo.new_dir/sub_dir/new_file.txt

Concatenação de directórios e nomes de ficheiros com os.path.join().

Além disso, o modo de abertura() é especificado como argumento. Para ficheiros de texto, o 'w' por defeito está bem, mas se quiser criar um ficheiro binário, defina mode='wb'.