Creating files and directories via Python

Question:

I’m having trouble creating a directory and then opening/creating/writing into a file in the specified directory. The reason seems unclear to me. I’m using os.mkdir() and

path=chap_name
print "Path : "+chap_path                       #For debugging purposes
if not os.path.exists(path):
    os.mkdir(path)
temp_file=open(path+'/'+img_alt+'.jpg','w')
temp_file.write(buff)
temp_file.close()
print " ... Done"

I get the error

OSError: [Errno 2] No such file or directory: 'Some Path Name'

Path is of the form ‘Folder Name with un-escaped spaces’

What am I doing wrong here?


Update: I tried running the code without creating the directory

path=chap_name
print "Path : "+chap_path                       #For debugging purposes
temp_file=open(img_alt+'.jpg','w')
temp_file.write(buff)
temp_file.close()
print " ... Done"

Still get an error. Confused further.


Update 2:The Problem seems to be the img_alt, it contains a ‘/’ in some cases, which makes is causing the trouble.

So I need to handle the ‘/’.
Is there anyway to escape the ‘/’ or is deletion the only option?

Asked By: ffledgling

||

Answers:

import os

path = chap_name

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

filename = img_alt + '.jpg'
with open(os.path.join(path, filename), 'wb') as temp_file:
    temp_file.write(buff)

Key point is to use os.makedirs in place of os.mkdir. It is recursive, i.e. it generates all intermediate directories. See http://docs.python.org/library/os.html

Open the file in binary mode as you are storing binary (jpeg) data.

In response to Edit 2, if img_alt sometimes has ‘/’ in it:

img_alt = os.path.basename(img_alt)
Answered By: Rob Cowie
import os

os.mkdir('directory name') #### this command for creating directory
os.mknod('file name') #### this for creating files
os.system('touch filename') ###this is another method for creating file by using unix commands in os modules 
Answered By: Surya
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.