No such file or directory error
Question:
This is the error I am getting:
Traceback (most recent call last):
File "E:stuffmodule.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 SettingsAdministrator>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 SettingsAdministrator>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:stuffmodule.py
Answers:
how about reading permissions? maybe not authorized to read (default mode of open)
Since it is windows, and the backslash is a escape character, you must double the backslash to escape it. Try
e:\stuff\log.txt
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.
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).
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()
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.
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();
}
}
just use raw string with absolute path
file_path = r"E:stufflog.txt"
this should work fine
This is the error I am getting:
Traceback (most recent call last):
File "E:stuffmodule.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 SettingsAdministrator>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 SettingsAdministrator>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:stuffmodule.py
how about reading permissions? maybe not authorized to read (default mode of open)
Since it is windows, and the backslash is a escape character, you must double the backslash to escape it. Try
e:\stuff\log.txt
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.
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).
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()
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.
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();
}
}
just use raw string with absolute path
file_path = r"E:stufflog.txt"
this should work fine