Более постоянным решением является подкласс 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]
Поскольку вам нужно присоединиться к 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 () следующим образом:
blockquote>normpath(join(os.getcwd(), path))
., где
os.getcwd()
возвращает путь к текущему рабочему каталогу.
isfile()
просматривается в текущем каталоге. Если вы не укажете имя каталога с именем файла, он не знает, где найти ваши файлы.
os.path.abspath(x)
– Rolex 22 August 2015 в 14:24os.path.abspath(x)
также работает с текущим каталогом, а не сdirname
. – Anand S Kumar 22 August 2015 в 14:28