Python - есть ли способ, чтобы os.listdir () возвращал бред для неверного имени папки? - PullRequest
3 голосов
/ 22 сентября 2009

У меня есть простой скрипт, написанный на Python:

import os

def Path(SourcePath):
    for Folder in os.listdir(SourcePath):
        print "TESTING: %s" % Folder

Path("\\\\192.168.0.36\\PDFs")

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

Проблема в том, что если имя папки имеет пробел в конце своего имени, вышеприведенный скрипт перечисляет jibberish.

Например, если у меня есть следующие папки в вышеуказанном общем ресурсе:

  1. "6008386 HH - Крис Уокерс"
  2. "6008157 CPP - Santas Chocolate"
  3. "6007458 SCA - Morrisons Bananas"

Обратите внимание, что в конце "6008157 CPP - Santas Chocolate" есть пробел. Это список из приведенного выше сценария:

  1. "ИСПЫТАНИЕ: 6008386 ЧЧ - Криспы Уокерса"
  2. "ТЕСТИРОВАНИЕ: 6EBA72 ~ 1"
  3. "ТЕСТИРОВАНИЕ: 6007458 SCA - Моррисон Бананы"

Как я могу избежать этого при повторном использовании удаленного каталога? Я мог бы исправить имя папки, только если оно было правильно возвращено функцией os.listdir ().

Есть идеи, как с этим справиться?

Ответы [ 2 ]

4 голосов
/ 22 сентября 2009

Windows использует сгенерированные 8.3 "заполнители", когда имя файла над CIFS содержит символы, которые недопустимы в имени файла Windows.

В этом случае это происходит потому, что имя вашего файла "Santas Chocolate" заканчивается пробелом. Имена файлов Windows не могут заканчиваться пробелами, поэтому он использует местозаполнитель, чтобы сделать файл доступным.

Я не думаю, что вы можете использовать GetLongPathName для этого - нет длинного имени файла для сопоставления, потому что это, по определению, будет недопустимым именем файла. Если у вас есть такие имена файлов, я не думаю, что есть какой-либо способ узнать, что это на самом деле на сервере, и это принесет вам ограниченную пользу, поскольку вы не можете ссылаться на него по этому имени.

3 голосов
/ 22 сентября 2009

Это не ( г | j ) иббериш, это короткое (8.3) имя файла . Это зависит от Windows, но вы можете использовать <a href="http://msdn.microsoft.com/en-us/library/aa364980%28VS.85%29.aspx" rel="nofollow noreferrer">GetLongPathName()</a>, чтобы отобразить его обратно на длинное имя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...