6
votes

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?

1
Are you running the code as the same user in both instances? - unutbu
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. - unutbu
@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? - ddd
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. - unutbu
You should be aware that dir is a built-in function. Better to pick a different variable name - chaimp

1 Answers

10
votes

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