Reputation: 1320
Hi: I am trying to use the Pandas
DataFrame.to_csv
method to save a dataframe
to a csv
file:
filename = './dir/name.csv'
df.to_csv(filename)
However I am getting the error:
IOError: [Errno 2] No such file or directory: './dir/name.csv'
Shouldn't the to_csv
method be able to create the file if it doesn't exist? This is what I am intending for it to do.
Upvotes: 89
Views: 151855
Reputation: 31
I've the same problem but only for one filename. I save a lot files with diferent names in the same folder. And if I change this filename save the file.
I've a question, OS library have some chars reserved?
When I save "PRN.csv" in any folder take this error, if I change filename to "PRN5.csv" I can save it without errors.
Upvotes: 0
Reputation: 1210
In my case it was some permission issue. My os is Windows. There is a antivirus installed and I made that directory protected earlier. I totally forgot that. After disabling it, it worked fine. So, when you face any issue regarding this, do check if the directory is protected or not.
Upvotes: 0
Reputation: 73
Adding to the answer of Tim if you have the whole file path in one string you can use this modified version:
from pathlib import Path
output_file = '/tmp/long_path/to/my_dir/my_file.csv'
output_file_path = Path(output_file)
output_file_path.parent.mkdir(parents=True, exist_ok=True)
df.to_csv(output_file)
By using the full path of the file in Path() it will point to that file, therefore we need to call .parent before .mkdir to not create a directory with the name of our file.
Upvotes: 1
Reputation: 150
I had this error when I accidentally added file://
at the begging of the save path. Since search brought me here, might be also helpful to someone.
Upvotes: 3
Reputation: 2049
Here is an alternative way to do this using the excellent standard library pathlib
module, which generally makes things neater.
As explained elsewhere, to_csv
will create the file if it doesn't exist, but won't create any non-existent directories in the path to the file, so you need to first ensure that these exist.
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
Setting parents=True
will also create any necessary parent directories, and exist_ok=True
means it won't raise an error if the directory already exists, so you don't have to explicitly check that separately.
Upvotes: 75
Reputation: 1736
to_csv
does create the file if it doesn't exist as you said, but it does not create directories that don't exist. Ensure that the subdirectory you are trying to save your file within has been created first.
I often do something like this in my work:
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)
This can easily be wrapped up in a function if you need to do this frequently.
Upvotes: 142