Pythonの文字列はいろいろなことができます。 1丁目1番地
# -*- coding: utf-8 -*-
def main():
name = "01234567890Abc"
print(name)
if __name__ == "__main__":
main()
実行結果:
01234567890Abc
文字列nameはオブジェクトなのでピリオドを付けてメソッドを呼び出して必要なデータを取り出せます。
以下はメソッドを使ったサンプルです。
# -*- coding: utf-8 -*-
def main():
name = "01234567890Abc"
str = name.replace("Abc", "XYZ", 1)
print("replaceの結果", str)
str = name.split("890",3)
print("splitの結果",str)
str = name.join("XYZ")
print("joinの結果",str)
str = name.rindex("23")
print("rindexの結果",str)
no = name.rfind("78")
print("rfindの結果",no)
name = "greeeen"
no = name.count("e")
print("countの結果",no)
if __name__ == "__main__":
main()
実行結果:
replaceの結果 01234567890XYZ
splitの結果 ['01234567', 'Abc']
joinの結果 X01234567890AbcY01234567890AbcZ
rindexの結果 2
rfindの結果 7
countの結果 4
joinはこうなるんだとわかりました。
文字列に関してよく使う関数です。C言語ではお馴染みのstrlen,sprintfは以下のようになります。
# -*- coding: utf-8 -*-
def main():
str = 'Hello'
#文字列の長さを取得 C2言語 strlen相当
lenght = len(str)
print(lenght)
#C言語のsprintf相当
str = '{}の誕生日は{}年{}月{}日です。'.format('Lisa', 1998, 2, 14)
print(str)
p = 3.14159265359
str = '円周率を書数点以下にすると{:.2f}です。'.format(p)
print(str)
p = 98
str = '4桁で0の桁はスペースを埋め込みました。{:4d}'.format(p)
print(str)
a = 43
str = '4桁で0の桁は0を埋め込みました。{:04d}'.format(a)
print(str)
if __name__ == "__main__":
main()
実行結果;
Lisaの誕生日は1998年2月14日です。
円周率を書数点以下にすると3.14です。
4桁で0の桁はスペースを埋め込みました。 98
4桁で0の桁は0を埋め込みました。0043
strlen相当はstrがなくなっただけのようです。sprintf総統はだいぶ景色がかわりました。
C言語 "%d" Python "{:d}".format(num)
%dが{:d}に代わってformatが{:d}に入るデータを指定しています。
これで他の言語でやっていた文字列の処理の基本ができました。次はPython特有のマニアックな文字れる処理です。
ブランケット[]を使った文字列の操作
Pythonはブラケット[]を使った文字列の操作が多彩です。一番簡単な例です。
# -*- coding: utf-8 -*-
def main():
str = '123456789xyz'
print(str[0])
if __name__ == "__main__":
main()
実行結果:
1
これはC言語などでも配列でおなじみの例です。ブランケットを使ったフォーマットです。 文字列[開始文字位置:終了文字位置:ステップ文字数]
自分の表現で記述したのでわかりにくいかも.... 何は何よりサンプルコードでみればわかりやすいと思います。
# -*- coding: utf-8 -*-
def main():
str = '0123456789xyz'
#Python独自のブラケット[]による文字列の操作
result = str[::]
print('[::] ' + result)
result = str[2::]
print('[2::] ' + result)
result = str[2:6:]
print('[2:6:] ' + result)
result = str[2:-1:]
print('[2:-1:] ' + result)
result = str[2:-1:2]
print('[2:-1:2] ' + result)
result = str[6:2:]
print('[6:2:] ' + result)
result = str[::-1]
print('[::-1] ' + result)
result = str[6:0:-1]
print('[6:0:-1] ' + result)
result = str[-3::]
print('[-3::] ' + result)
if __name__ == "__main__":
main()
実行結果:
[::] 0123456789xyz
[2::] 23456789xyz
[2:6:] 2345
[2:-1:] 23456789xy
[2:-1:2] 2468x
[6:2:]
[::-1] zyx9876543210
[6:0:-1] 654321
[-3::] xyz
[::] 何も指定しないと全文字が対象です。 [2::]開始文字位置指定すると0から数えて2番目の文字2からzまでです。
[2:6:]終了文字位置指定からひとつ前の文字までです。 [2:-1:]-1は終了文字位置からひとつ前の文字までです。 [6:0:-1]0は先頭文字からひとつ次の前の文字までです。
終了文字位置が曲者です。 ステップ文字数: 正の時は終了文字位置の前の文字までです。 負の時は終了文字位置の次の文字までです。
応用例:
# -*- coding: utf-8 -*-
def main():
japan = 'www.xxxxx.co.jp'
#最後の'.'の位置を取得
index = japan.rfind('.')
country = japan[index+1:]
print(country)
usa = 'www.xxxxx.com'
#最後の'.'の位置を取得
index = usa.rfind('.')
country = usa[index+1:]
print(country)
if __name__ == "__main__":
main()
実行結果;
jp
com
|