Pandas DataFrame.to_csv raise IOError: Нет такого файла или каталога

Привет: Я пытаюсь использовать Pandas DataFrame.to_csv метод для сохранения dataframe в csv - файл:

filename = './dir/name.csv'

df.to_csv(filename)

Однако я получаю сообщение об ошибке:

IOError: [Errno 2] No such file or directory: './dir/name.csv'

Должен to_csv метод to_csv создавать файл, если он не существует? Это то, что я собираюсь сделать для этого.

Ответ 1

to_csv создает файл, если он не существует, как вы сказали, но он не создает каталоги, которые не существуют. Убедитесь, что подкаталог, который вы пытаетесь сохранить файл внутри, был создан первым.

Я часто делаю что-то подобное в своей работе:

import os

outname = 'name.csv'

outdir = './dir'
if not os.path.exists(outdir):
    os.mkdir(outdir)

fullname = os.path.join(outdir, outname)    

df.to_csv(fullname)

Это можно легко обернуть в функцию, если вам нужно делать это часто.

Ответ 2

Вот альтернативный способ сделать это с помощью превосходного стандартного модуля pathlib библиотеки, который обычно делает вещи лучше.

Как объяснялось в другом месте, to_csv создаст файл только в том случае, если он не существует, но не содержит никаких каталогов, поэтому вам необходимо сначала убедиться, что они существуют.

from pathlib import Path

output_file = 'my_file.csv'
output_dir = Path('long_path/to/my_dir')

output_dir.mkdir(parents=True, exist_ok=True)

df.to_csv(output_dir / output_file)  # can join path elements with / operator

Установка parent parents=True также создаст все необходимые родительские каталоги, а exist_ok=True означает, что не возникнет ошибка, если каталог уже существует, поэтому вам не нужно явно проверять это отдельно.