os.path.isdir returns false when folder exists?

16,001

The dir in download had whitespace at the end while the dir defined in the interactive session did not. The difference was discovered by printing repr(dir).

In [3]: os.path.isdir('/tmp')
Out[3]: True

In [4]: os.path.isdir('/tmp\n')
Out[4]: False
Share:
16,001
ddd
Author by

ddd

Updated on June 27, 2022

Comments

  • ddd
    ddd almost 2 years

    I have the following code which checks if the directory exists

    def download(id, name, bar):
        cwd = os.getcwd()
        dir = os.path.join(cwd,bar)
        partial = os.path.join(cwd, id + ".partial")
        print os.path.isdir(dir)
        if(os.path.isdir(dir)):
            print "dir exists"
            dir_match_file(dir, bar)
        else:
            print dir
    

    For a directory that actually exists, it returns "False". Here is the output:

    False
    /scratch/rists/djiao/Pancancer/RNA-seq/CESC/TCGA-BI-A0VS-01A-11R-A10U-07
    

    When I go to python interactive session and type in os.path.isdir("/scratch/rists/djiao/Pancancer/RNA-seq/CESC/TCGA-BI-A0VS-01A-11R-A10U-07"), it returns "true".

    Why does it say false when the folder exists?

    • unutbu
      unutbu almost 10 years
      Are you running the code as the same user in both instances?
    • unutbu
      unutbu almost 10 years
      Change print dir to print(repr(dir)). Let's see if there is some "invisible" character there such as a CR/LF at the end.
    • ddd
      ddd almost 10 years
      @unutbu ah, there is a '\n' at the end. I read in bar from a file with readlines. Guess I have to rstrip it. What exactly does repr do on a string?
    • unutbu
      unutbu almost 10 years
      repr(obj) returns a str which is intended to be an unambiguous representation of the object. It's useful to inspect basestrings (strs or unicode) using repr since it will tell you exactly what bytes or code points the basestring is composed of.
    • chaimp
      chaimp about 9 years
      You should be aware that dir is a built-in function. Better to pick a different variable name