Проверьте полные пути в Python

Самая прямая опция будет для использования функция ToTitleCase, которая доступна в.NET, которая должна заботиться об имени большую часть времени. Как edg, на который указывают там, является некоторыми именами, на которые он не будет работать, но они довольно редки поэтому, если Вы не нацелены на культуру, где такие имена распространены, что это не необходимо что-то, о чем необходимо волноваться слишком много.

Однако, если Вы не работаете с языком.NET, тогда он зависит от того, на что вход похож - если у Вас есть два отдельных поля для имени и фамилии тогда, можно просто использовать для своей выгоды первую букву более низкая остальная часть его с помощью подстрок.

firstName = firstName.Substring(0, 1).ToUpper() + firstName.Substring(1).ToLower();
lastName = lastName.Substring(0, 1).ToUpper() + lastName.Substring(1).ToLower();

Однако при обеспечении нескольких имен как части той же строки тогда необходимо знать, как Вы получаете информацию, и разделяет его соответственно. Таким образом, если Вы получаете имя как "John Doe" Вы разделение строка, основанная на пробеле. Если это находится в формате, таком как "Doe, John", Вы собираетесь должны разделить его основанный на запятой. Однако, как только у Вас есть он разделение независимо, Вы просто применяете код, показанный ранее.

9
задан lfaraone 30 July 2009 в 17:29
поделиться

4 ответа

$ touch foo
$ ln -s foo bar
$ python
Python 2.5.1 (r251:54863, Feb  6 2009, 19:02:12) 
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> help(os.path.samefile)
Help on function samefile in module posixpath:

samefile(f1, f2)
    Test whether two pathnames reference the same actual file

>>> os.path.samefile("foo", "bar")
True
24
ответ дан 4 December 2019 в 06:57
поделиться

You want to use os.path.abspath(path) to normalize each path for comparison.

os.path.abspath(foo) == os.path.abspath(bar)
6
ответ дан 4 December 2019 в 06:57
поделиться

A simple string compare should work:

import os
print os.path.abspath(first) == os.path.abspath(second)

Credit to Andrew, he corrected my initial post which included a call to os.path.normpath: this is unneeded because the implementation of os.path.abspath does it for you.

3
ответ дан 4 December 2019 в 06:57
поделиться

В системах Windows нет функции samefile , и вам также нужно беспокоиться о регистре. Функция normcase из os.path может быть объединена с abspath для обработки этого случая.

from os.path import abspath, normcase

def are_paths_equivalent(path1, path2):
    return normcase(abspath(path1)) == normcase(abspath(path2))

При этом «C: \ SPAM \ Eggs.txt» будет считаться эквивалентным «c: \ spam \ egg.txt» в Windows.

Обратите внимание, что в отличие от samefile , все методы, основанные на нормализации и сравнении путей, не будут учитывать случаи, когда совершенно разные пути относятся к одному и тому же файлу. В Windows это означает, что если вы используете SUBST, MKLINK или подключенные сетевые ресурсы для создания нескольких разных путей к одному и тому же файлу, ни одно из этих решений не сможет сказать «это тот же файл». Надеюсь, в большинстве случаев это не проблема.

0
ответ дан 4 December 2019 в 06:57
поделиться
Другие вопросы по тегам:

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