Самая прямая опция будет для использования функция 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", Вы собираетесь должны разделить его основанный на запятой. Однако, как только у Вас есть он разделение независимо, Вы просто применяете код, показанный ранее.
$ 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
You want to use os.path.abspath(path)
to normalize each path for comparison.
os.path.abspath(foo) == os.path.abspath(bar)
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.
В системах 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 или подключенные сетевые ресурсы для создания нескольких разных путей к одному и тому же файлу, ни одно из этих решений не сможет сказать «это тот же файл». Надеюсь, в большинстве случаев это не проблема.