Pandas DataFrame.to_csv引发IOError:没有这样的文件或目录

LoL*_*oLa 23 python python-2.7 pandas

嗨:我正在尝试使用该Pandas DataFrame.to_csv方法将文件保存dataframecsv文件中:

filename = './dir/name.csv'

df.to_csv(filename)
Run Code Online (Sandbox Code Playgroud)

但是我收到错误:

IOError: [Errno 2] No such file or directory: './dir/name.csv'
Run Code Online (Sandbox Code Playgroud)

如果to_csv该文件不存在,该方法是否应该能够创建该文件?这就是我打算做的事情.

qRT*_*PCR 37

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)
Run Code Online (Sandbox Code Playgroud)

如果您需要经常这样做,这可以很容易地包含在一个函数中.

  • `os.mkdir`只创建一个直接目录.如果路径中有多个级别的目录不存在,请使用`os.makedirs`.但请注意,如果叶子存在,它会抛出一个"OSError" (5认同)
  • @mz8i 如果现有的叶目录是可接受的,则可以使用“exist_ok=True”调用“os.makedirs”以避免错误。 (5认同)

Tim*_*Tim 13

这是使用出色的标准库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
Run Code Online (Sandbox Code Playgroud)

设置parents=True还将创建任何必要的父目录,exist_ok=True这意味着如果该目录已经存在,则不会引发错误,因此您不必单独进行明确检查。

  • @JKK您可以使用os.makedirs('long_path / to / my_dir',exist_ok = True)`进行完全相同的操作-具有完全相同的行为。但是,如果那是您的最佳选择,那么面向对象的“ pathlib”方法就没错! (3认同)
  • `pathlib`真是一个梦想!:D (2认同)