Richard Knop
Richard Knop

Reputation: 83677

No such file or directory error

This is the error I am getting:

Traceback (most recent call last):
  File "E:\stuff\module.py", line 91, in <module>
    f = open('E:/stuff/log.txt')
IOError: [Errno 2] No such file or directory: 'E:/stuff/log.txt'

And this is my code:

f = open('E:/stuff/log.txt')

The E:/stuff/log.txt file exists. I can navigate in Windows Explorer and open it so why can't I open it?

EDIT:

Output of DIR command:

C:\Documents and Settings\Administrator>dir e:\stuff
 Volume in drive E has no label.
 Volume Serial Number is 5660-4957

 Directory of e:\stuff

23. 10. 2010  09:26    <DIR>          .
23. 10. 2010  09:26    <DIR>          ..
19. 10. 2010  20:07               385 index.py
23. 10. 2010  16:12             1 954 module.py
22. 10. 2010  19:16             8 335 backprop.py
19. 10. 2010  20:54             1 307 backprop-input.gif
19. 10. 2010  01:48               310 HelloWorld.kpf
23. 10. 2010  15:47                 0 log.txt.txt
               6 File(s)         12 291 bytes
               2 Dir(s)   8 795 586 560 bytes free



C:\Documents and Settings\Administrator>dir e:\
 Volume in drive E has no label.
 Volume Serial Number is 5660-4957

 Directory of e:\

16. 10. 2010  13:32    <DIR>          development-tools
23. 10. 2010  09:26    <DIR>          stuff
               0 File(s)              0 bytes
               2 Dir(s)   8 795 586 560 bytes free

I am running the python script from the cmd like this:

python E:\stuff\module.py

Upvotes: 7

Views: 37435

Answers (8)

Lokesh Ajja
Lokesh Ajja

Reputation: 11

just use raw string with absolute path

file_path = r"E:\stuff\log.txt"

this should work fine

Upvotes: 1

Nimai Charan Maikap
Nimai Charan Maikap

Reputation: 1

Following Worked for me. Instead of using Environment.getExternalStorageDirectory() use context.getFilesDir().
Following peice of code worked for me.

public void create_file(Context context, String sFileName, String sBody) {
        try {
            File root = new File(context.getFilesDir(), "NEC_TEXT");
            if (!root.exists()) {
                root.mkdir();
            }
            File filepath = new File(root, sFileName);
            FileWriter writer = new FileWriter(filepath);
            writer.append(sBody);
            writer.flush();
            writer.close();
            Toast.makeText(context, "Saved", Toast.LENGTH_SHORT).show();
        } catch (IOException e) {
            Toast.makeText(context, "Error"+e.toString(), Toast.LENGTH_SHORT).show();
            e.printStackTrace();



           }
}

Upvotes: 0

brady
brady

Reputation: 2247

Look at this line in the "dir" output:

23. 10. 2010  15:47                 0 log.txt.txt

The file you are looking for is named "log.txt.txt", not "log.txt". I see this happen when people set up the Windows file manager to not show known file extensions and then they try to add or modify an extension. I recommend to others that they turn this behavior off. You can do this under View->Folder Options I believe.

Upvotes: 4

ghostdog74
ghostdog74

Reputation: 342263

Define you path names using os.path.join()

root="E:\\"
mylog = os.path.join(root,"stuff","log.txt") # or log.txt.txt as seen in your dir output
f = open(mylog)
...
f.close()

Upvotes: 1

Tim Čas
Tim Čas

Reputation: 10867

Firstly, from above, Windows supports / just fine.

Secondly: Well, if you look at your file, you'll notice it's not log.txt, it's log.txt.txt... You may see it as "log.txt" in your graphical folder viewer (as opposed to the CLI "dir" command) simply because it hides the known file extensions.

I recommend you disable this - see folder options, there should be an option "Hide extensions of known file types" (or similar).

Upvotes: 13

mouad
mouad

Reputation: 70021

it been a long time that i didn't use windows, but if i remember well windows use back-slash in system path so you should do:

import os

file_name = os.path.join("e:\\stuff", "log.txt")

f = open(file_name)

and not:

f = open('E:/stuff/log.txt')

there is not / in paths in windows.

Upvotes: 1

Rawheiser
Rawheiser

Reputation: 1220

Since it is windows, and the backslash is a escape character, you must double the backslash to escape it. Try

e:\\stuff\\log.txt

Upvotes: 1

tutuDajuju
tutuDajuju

Reputation: 10840

how about reading permissions? maybe not authorized to read (default mode of open)

Upvotes: 1

Related Questions