I am just a newbie in python, so sorry for noobish question
>>> import os >>> os.listdir("/home/user/Desktop/1") ['1.txt', '2', '3.txt'] >>> os.path.isfile("/home/user/Desktop/1/1.txt") True >>> for i in os.listdir("/home/user/Desktop/1"): ... print(os.path.isfile(i)) ... False False False >>>
two of them are files then why the output is False when it should be True?
The os. path. isfile() is an inbuilt Python function that returns True if the path is an absolute pathname. On Unix, that means it begins with a slash; on Windows, it begins with a (back)slash after chopping off a potential drive letter.
path. exists() method in Python is used to check whether the specified path exists or not. This method can be also used to check whether the given path refers to an open file descriptor or not.
path. isdir() method checks if a directory exists. It returns False if you specify a path to a file or a directory that does not exist. If a directory exists, isdir() returns True.
To check if a file exists, you pass the file path to the exists() function from the os. path standard library. If the file exists, the exists() function returns True . Otherwise, it returns False .
The problem is with your CWD (Current Working Directory) because os.listdir()
give you files whose are relative to the provided path and it's inconsistent with CWD. The solution is to set your CWD before using os.listidr()
:
dir_to_delete = '/home/user/Desktop/1' os.chdir(dir_to_delete) [f for f in os.listdir() if os.path.isfile(f)]
or just repair path to files:
[f for f in os.listdir(dir_to_delete) if os.path.isfile(os.path.join(dir_to_delete, f))]
When you print os.path.isfile(i)
, you're checking if "1.txt" or "2" or "3.txt" is a file, whereas when you run os.path.isfile("/home/user/Desktop/1/1.txt")
you have a full path to the file.
Try replacing that line with
print(os.path.isfile("/home/user/desktop/1/" + i))
Edit:
As mentioned in the comment below by icktoofay, a better solution might be to replace the line with
print(os.path.isfile(os.path.join("/home/user/desktop/1", i)))
or to earlier store "/home/user/desktop/1" to some variable x, allowing the line to be replaced with
print(os.path.isfile(os.path.join(x,i)))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With