• Uncategorized

About python : Python-using-open-w-FileNotFoundError

Question Detail

I get a FileNotFoundError when trying to write to a file.
This is my code:

def save_txt_individual_tracks(track, folder, i):
    f = open(folder+str(i)+'.txt','w+')
        for line in track:
            l=str(line[0])+','+str(line[1])+','+str(line[2])+'\n'
        f.write(l)
    f.close()

Which I call like so:

save_txt_individual_tracks(new,'E:/phoneTracks/'+track_name+'/',i)

Which gives me this error:

FileNotFoundError: [Errno 2] No such file or directory: ‘E:/phoneTracks/TA92903URN7ff/0.txt’

I created folder phoneTracks in E. And I am confused about open() with mode 'w+', which is used to create a new file. Why do I get a FileNotFoundError? What can I do to fix it?

I am running python3.4.3 on windows 7

Question Answer

You are getting the error because the directory – E:/phoneTracks/TA92903URN7ff/ does not exist.

Example to show this error –

In [57]: open('blah/abcd.txt','w+')
---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
<ipython-input-57-46a07d4a5d18> in <module>()
----> 1 open('blah/abcd.txt','w+')

FileNotFoundError: [Errno 2] No such file or directory: 'blah/abcd.txt'

Got error in my code, because the directory blah/ does not exist.

If the directory – TA92903URN7ff/ is constant, try creating it and then running. If its not constant, you can checkout os.path.exists to check if the directory exists or not, and if it doesn’t exist, create one using os.mkdir .

Example –

import os, os.path
def save_txt_individual_tracks(track,folder,i):
    if not os.path.exists(folder):
         os.mkdir(folder)
    elif not os.path.isdir(folder):
         return #you may want to throw some error or so.
    f = open(os.path.join(folder, str(i)+'.txt'),'w+')
        for line in track:
            l=str(line[0])+','+str(line[1])+','+str(line[2])+'\n'
        f.write(l)
    f.close()

Also, you should consider using os.path.join to join paths, instead of using string concatenation. And also using with statement for openning files as – with open(os.path.join(folder, str(i)+'.txt'),'w+') as f: , that way the file will automatically get closed once the with block ends.

You may also like...

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.