ошибка с использованием shutil и переименовать [duplicate]

Более постоянным решением является подкласс float:

>>> class prettyfloat(float):
    def __repr__(self):
        return "%0.2f" % self

>>> x
[1.290192, 3.0002, 22.119199999999999, 3.4110999999999998]
>>> x = map(prettyfloat, x)
>>> x
[1.29, 3.00, 22.12, 3.41]
>>> y = x[2]
>>> y
22.12

Проблема с подклассом float заключается в том, что он разбивает код, явно ищущий тип переменной. Но насколько я могу судить, это единственная проблема с этим. Простой x = map(float, x) отменяет преобразование в prettyfloat.

Трагично, вы не можете просто обезьян-патч float.__repr__, потому что float неизменен.

Если вы не хотите подкласса float, но не против определения функции, map(f, x) намного более кратким, чем [f(n) for n in x]

1
задан JETM 14 December 2016 в 14:42
поделиться

2 ответа

Поскольку вам нужно присоединиться к dirname с помощью x, os.listdir() просто перечисляет содержимое напрямую, содержимое не имеет полного пути.

Пример -

[x for x in os.listdir('dirname') if os.path.isfile(os.path.join('dirname',x))]

Когда полный путь не указан, os.path.isfile() выполняет поиск в текущем каталоге, поэтому, когда вы даете '.' на os.listdir(), вы получаете правильный список назад.


Пример -

Допустим, что в некоторой папке /a/b/c есть файлы - x и y.

, когда вы делаете - os.listdir('/a/b/c'), возвращаемый список выглядит как -

['x','y']

Даже если вы укажете абсолютный путь внутри os.listdir(), файлы, возвращенные в списке, будут иметь относительный путь к директории. Вам нужно вручную подключиться к dir и x, чтобы получить правильные результаты.


В вашем третьем примере это не работает, потому что os.path.abspath() также работает с текущим каталогом, поэтому, если вы это сделаете что-то вроде -

os.path.abspath('somefile')

Полученный результат будет - /path/to/current/directory/somefile - он не проверяет, является ли это реальным файлом / dir или нет.

documentation (Emphasis mine) -

os.path.abspath (path)

Возвращает нормированную абсолютизированную версию пути пути. На большинстве платформ это эквивалентно вызову функции normpath () следующим образом: normpath(join(os.getcwd(), path)).

, где os.getcwd() возвращает путь к текущему рабочему каталогу.

3
ответ дан Anand S Kumar 15 August 2018 в 22:35
поделиться
  • 1
    но я уже это сделал os.path.abspath(x) – Rolex 22 August 2015 в 14:24
  • 2
    Обновленный ответ с примером, os.path.abspath(x) также работает с текущим каталогом, а не с dirname. – Anand S Kumar 22 August 2015 в 14:28
  • 3
    Благодаря! Я действительно понимаю сейчас. – Rolex 22 August 2015 в 14:42

isfile() просматривается в текущем каталоге. Если вы не укажете имя каталога с именем файла, он не знает, где найти ваши файлы.

0
ответ дан chicks 15 August 2018 в 22:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: