просто добавить еще один пример того, что лямбда может сделать без использования карты:
a = 10
b = 2
var mixed = (a,b) => a * b;
// OR
var mixed = (a,b) => { (any logic); return a * b };
console.log(mixed(a,b))
// 20
Последние строки не должны начинаться с косой черты. Если они начинаются с косой черты, то они считаются «абсолютным путем», и все, что перед ними, отбрасывается.
Цитирование документов Python для os.path.join
:
Если компонент является абсолютным путем, все предыдущие компоненты отбрасываются, а объединение продолжается от компонента абсолютного пути.
blockquote>Примечание о Windows, поведение по отношению к буквы букв, которые, по-видимому, изменились по сравнению с более ранними версиями Python:
В Windows буква диска не сбрасывается при обнаружении компонента абсолютного пути (например,
blockquote>r'\foo'
). Если компонент содержит букву диска, все предыдущие компоненты выбрасываются, и буква диска сбрасывается. Обратите внимание, что поскольку для каждого диска существует текущий каталог,os.path.join("c:", "foo")
представляет путь относительно текущего каталога на дискеC:
(c:foo
), а неc:\foo
.
Это потому, что ваш '/new_sandbox/'
начинается с /
и, следовательно, считается относительно корневого каталога. Удалите ведущий /
.
Идея os.path.join()
заключается в том, чтобы сделать вашу программу кросс-платформенной (linux / windows / etc).
Даже одна косая румяна.
Так что это имеет смысл при использовании с некоторой точкой отсчета, подобной os.environ['HOME']
или os.path.dirname(__file__)
.
Чтобы понять, почему это удивительное поведение не является полностью ужасным, рассмотрите приложение, которое принимает имя файла конфигурации в качестве аргумента:
config_root = "/etc/myapp.conf/"
file_name = os.path.join(config_root, sys.argv[1])
Если приложение выполняется с:
$ myapp foo.conf
Будет использоваться файл конфигурации /etc/myapp.conf/foo.conf
.
Но подумайте, что произойдет, если приложение вызвано с помощью:
$ myapp /some/path/bar.conf
Затем myapp
должен использовать файл конфигурации в /some/path/bar.conf
(а не /etc/myapp.conf/some/path/bar.conf
или аналогичный).
Это может быть не очень хорошо, но я считаю, что это мотивация для поведения абсолютного пути.
сделать это так, без лишних косых черт
root="/home"
os.path.join(root,"build","test","sandboxes",todaystr,"new_sandbox")
Попробуйте только new_sandbox
os.path.join('/home/build/test/sandboxes/', todaystr, 'new_sandbox')
Не использовать косые черты в начале компонентов пути, за исключением случаев, когда они ссылаются на корневой каталог:
os.path.join('/home/build/test/sandboxes', todaystr, 'new_sandbox')
см. также: http://docs.python.org/library /os.path.html#os.path.join
Чтобы сделать вашу функцию более переносимой, используйте ее как таковой:
os.path.join(os.sep, 'home', 'build', 'test', 'sandboxes', todaystr, 'new_sandbox')
или
os.path.join(os.environ.get("HOME"), 'test', 'sandboxes', todaystr, 'new_sandbox')
Попробуйте комбо split("/")
и *
для строк с существующими соединениями.
import os
home = '/home/build/test/sandboxes/'
todaystr = '042118'
new = '/new_sandbox/'
os.path.join(*home.split("/"), todaystr, *new.split("/"))
Как это работает ...
split("/")
превращает существующий путь в список: ['', 'home', 'build', 'test', 'sandboxes', '']
*
перед списком разбивает каждый элемент списка на свой собственный параметр
Обратите внимание, что подобная проблема может вас укусить, если вы используете os.path.join()
для включения расширения, которое уже содержит точку, что происходит автоматически, когда вы используете os.path.splitext()
. В этом примере:
components = os.path.splitext(filename)
prefix = components[0]
extension = components[1]
return os.path.join("avatars", instance.username, prefix, extension)
Хотя extension
может быть .jpg
, вы получите папку с именем «foobar», а не файл «foobar.jpg». Чтобы этого не произошло, вам необходимо добавить расширение отдельно:
return os.path.join("avatars", instance.username, prefix) + extension
os.path.join()
может использоваться совместно с os.path.sep
для создания абсолютного, а не относительного пути.
os.path.join(os.path.sep, 'home','build','test','sandboxes',todaystr,'new_sandbox')
os.path.sep
в качестве первого элемента для построения абсолютного пути лучше, чем любой другой ответ здесь! Весь смысл использования os.path
, а не базовых методов str, заключается в том, чтобы избежать записи /
. Также отлично подходит для каждого подкаталога в качестве нового аргумента и удаления всех косых черт. Вероятно, было бы неплохо убедиться, что проверка todaystr
не начинается с косой черты! ;)
– snooze92
23 January 2014 в 10:59
os.path.normpath
для достижения этой цели. – Gareth Latty 28 October 2012 в 19:48