5

I want to work with paths in Windows in Python 3.3, but I have an error:

FileNotFoundError: [Errno 2] No such file or directory: 'E:\\dir\\.project'

The problem is the double backslash. I read the solution using r.

def f(dir_from):
    list_of_directory = os.listdir(dir_from)
    for element in list_of_directory:
        if os.path.isfile(os.path.join(dir_from, element)):
            open(os.path.join(dir_from, element))

f(r'E:\\dir')

I have this error again

FileNotFoundError: [Errno 2] No such file or directory: 'E:\\dir\\.project'

os.path.normpath(path) doesn't solve my problem.

What am I doing wrong?

PM 2Ring
  • 54,345
  • 6
  • 82
  • 182
ggoha
  • 1,996
  • 3
  • 23
  • 31
  • Double slahes aren't valid in Windows paths. (Except at the start to indicate an SMB connection to a remote server or to access the unmanaged file system api) – Basic Mar 21 '14 at 19:25
  • try changing '\\' for '/' – ederollora Mar 21 '14 at 19:26
  • Also note that by prefixing the string with `r`, you don't need to escape backslashes. See [this answer](http://stackoverflow.com/a/2081708/156755) for more information – Basic Mar 21 '14 at 19:27
  • 1
    You are mixing your work-arounds. Either use a raw string (`r'E:\dir'`) **or** double your backslashes, but not both. – Martijn Pieters Mar 21 '14 at 19:28

2 Answers2

11

If you are using a raw-string, then you do not escape backslashes:

f(r'E:\dir')

Of course, this problem (and many others like it) can be solved by simply using forwardslashes in paths:

f('E:/dir')
PM 2Ring
  • 54,345
  • 6
  • 82
  • 182
0

Changing '\\' for '/' worked for me. I created a directory named 'a' in C:/ for this example.

>>> (Python interpreter)
>>> import os
>>> os.path.isdir('C:/a/)')
>>> True
>>> os.path.isfile('C:/a/)')
>>> False
ederollora
  • 1,165
  • 2
  • 11
  • 29