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
означает, что не возникнет ошибка, если каталог уже существует, поэтому вам не нужно явно проверять это отдельно.