Является ли os.path.isfile всегда противоположностью os.path.isdir для существующего объекта файловой системы? - PullRequest
0 голосов
/ 26 ноября 2018

Я должен перечислить все файлы и каталоги в каталоге с os.listdir и надежно отличить их друг от друга.Можно ли просто использовать os.path.isdir и считать, что это файл, если он возвращает false, или я все равно должен проверить os.path.isfile?Есть ли случаи, когда os.path.exists(path) and os.path.isdir(path) == os.path.isfile(path) оказывается правдой?

Ответы [ 3 ]

0 голосов
/ 26 ноября 2018

У вас должно быть все хорошо, просто используйте os.path.isdir.Это только ищет, если введенный путь является каталогом.В противном случае можно предположить, что это файл.Я проверил, чтобы увидеть, есть ли случаи, когда os.path.exists(path) and os.path.isdir(path) == os.path.isfile(path) Вот результаты.

print(os.path.isdir("C:\\Users\\Kobe Thompson\\Desktop\\Test\\")) print(os.path.exists("C:\\Users\\Kobe Thompson\\Desktop\\Test\\")) print(os.path.isfile("C:\\Users\\Kobe Thompson\\Desktop\\Test\\"))

True, True, False

print(os.path.isdir("C:\\Users\\Kobe Thompson\\Desktop\\Test\\test"))
print(os.path.exists("C:\\Users\\Kobe Thompson\\Desktop\\Test\\"))
print(os.path.isfile("C:\\Users\\Kobe Thompson\\Desktop\\Test\\"))

Ложь, Правда, Ложь

print(os.path.isdir("C:\\Users\\Kobe Thompson\\Desktop\\Test\\test"))
print(os.path.exists("C:\\Users\\Kobe Thompson\\Desktop\\Test\\test"))
print(os.path.isfile("C:\\Users\\Kobe Thompson\\Desktop\\Test\\"))

Ложь, Ложь, Ложь

print(os.path.isdir("C:\\Users\\Kobe Thompson\\Desktop\\Test\\test"))
print(os.path.exists("C:\\Users\\Kobe Thompson\\Desktop\\Test\\test"))
print(os.path.isfile("C:\\Users\\Kobe Thompson\\Desktop\\Test\\test"))

Ложь, Ложь, Ложь,

Как видите, есть некоторые случаи, которые могут относиться как os.path.isdir, так и os.path.exists к os.path.isfile

0 голосов
/ 26 ноября 2018

os.path.isdir(path) == os.path.isfile(path) никогда не должен храниться во всех известных мне дисковых файловых системах, поскольку это должно означать, что один и тот же объект является и каталогом, и файлом.В частности, EXT4 , насколько я понимаю, индекс может быть каталогом или файлом.

Однако две функции не определены как взаимоисключающие , так какэто потребовало бы предположения о том, что это верно для всех возможных файловых систем, включая будущие, и прогнозы относительно этого сложны.

0 голосов
/ 26 ноября 2018

os.path.isdir и os.path.isfile оба в порядке!os.path.exists (путь) и os.path.isdir (путь) == os.path.isfile (путь) всегда имеет значение False

...