os.path.exists возвращает False на Windows, хотя файл существует (MAX_PATH 260 Windows API проблема?) - PullRequest
2 голосов
/ 19 марта 2020

Я получаю ложноотрицательный для файла, который существует с os.path.exists.

path = '\\\\fgcz-biobeamer.uzh.ch\\Data2San\\p3061\\Proteomics\\TIMSTOF_1\\spfammatter_20200317\\3-17-2020_22-17-14_200ngHeLa_stdPASEF_100minGT__MSdataReduction_moderate_Rep1_520_1_Slot1-46.d\\stdPASEF_100minGT_MSdataReduction_moderate_520.m\\microTOFQImpacTemAcquisition.method'

os.path.exists(path) # returns false

len(path) # returns 260

Я немного погуглил и нашел:

В API Windows (с некоторыми исключениями, описанными в следующих параграфах), максимальная длина пути равна MAX_PATH, которая определена как 260 символов.

(https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file)

Существует ли другой python API, который может обрабатывать пути той длины, которую я мог бы использовать?

Некоторые windows инструменты не могут обрабатывать эти пути (хотя я создал этот файл с помощью robocopy, который является windows инструментом).

PS C:\Users\Admin> ls \\fgcz-biobeamer.uzh.ch\Data2San\p3061\Proteomics\TIMSTOF_1\spfammatter_20200317\3-17-2020_22-17-1
4_200ngHeLa_stdPASEF_100minGT__MSdataReduction_moderate_Rep1_520_1_Slot1-46.d\stdPASEF_100minGT_MSdataReduction_moderate
_520.m\


    Directory: \\fgcz-biobeamer.uzh.ch\Data2San\p3061\Proteomics\TIMSTOF_1\spfammatter_20200317\3-17-2020_22-17-14_200n
    gHeLa_stdPASEF_100minGT__MSdataReduction_moderate_Rep1_520_1_Slot1-46.d\stdPASEF_100minGT_MSdataReduction_moderate_
    520.m


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
------        3/18/2020  12:45 AM            156 desktop.ini
------        3/17/2020  10:17 PM          14301 hystar.method
------        3/18/2020  12:45 AM              0 lock.file
------        3/18/2020  12:45 AM         129055 microTOFQImpacTemAcquisition.method

, но


PS C:\Users\Admin> ls \\fgcz-biobeamer.uzh.ch\Data2San\p3061\Proteomics\TIMSTOF_1\spfammatter_20200317\3-17-2020_22-17-1
4_200ngHeLa_stdPASEF_100minGT__MSdataReduction_moderate_Rep1_520_1_Slot1-46.d\stdPASEF_100minGT_MSdataReduction_moderate
_520.m\microTOFQImpacTemAcquisition.method
ls : Cannot find path '\\fgcz-biobeamer.uzh.ch\Data2San\p3061\Proteomics\TIMSTOF_1\spfammatter_20200317\3-17-2020_22-17
-14_200ngHeLa_stdPASEF_100minGT__MSdataReduction_moderate_Rep1_520_1_Slot1-46.d\stdPASEF_100minGT_MSdataReduction_moder
ate_520.m\microTOFQImpacTemAcquisition.method' because it does not exist.
At line:1 char:1
+ ls \\fgcz-biobeamer.uzh.ch\Data2San\p3061\Proteomics\TIMSTOF_1\spfamm ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (\\fgcz-biobeame...uisition.method:String) [Get-ChildItem], ItemNotFound
   Exception
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand

Я использую Python 3.7.7 64bit

>>> import sys
>>> sys.maxsize > 2**32
True
...