Thursday, July 9, 2015

თავი 6(6,10 - 6,11)



6.10 სტრინგის გარჩევა

ხშირად გვინდა რომ სტრინგში ვიპოვნოთ ქვე-სტრინგი. თუ  გვექნება ასეთი ფორმის უამრავი ხაზი:

From stephen.marquard@ uct.ac.za Sat Jan 5 09:14:16 2008

და თითო ხაზიდან სტრინგის მხოლოდ მეორე ნაწილი (მაგ: uct.ac.za  გვჭირდება, ასეთი ხაზის მიღება შეგვიძლია find მეთოდით და სტრინგის დაჭრით.
პირველად  სტრინგში ვპოულობთ ეთ(@) ნიშანის პოზიციას და  შემდეგ  ვჭრით სტრინგს და გამოგვაქვს სტრინგის ის ნაწილი რომელიც გვინდა:

>>> data = 'From stephen.marquard@uct.ac.za Sat Jan 5 09:14:16 2008'
>>> atpos = data.find('@')
>>> print atpos
21
>>> sppos = data.find(' ',atpos)
>>> print sppos
31
>>> host = data[atpos+1:sppos]
>>> print host
uct.ac.za
>>> 

გამოვიყენეთ find მეთოდი, რომელიც საშუალებას გვაძლევს მივუთითოთ ის პოზიცია, საიდანაც find - მა უნდა მოძებნოს. როცა დავჭერით, გამოვაცალკევეთ სიმბოლოები  ეთ ნიშანიდან ზემოთ; ჰარის გარეშე.
find მეთოდის დოკუმენტაცია შეგიძლია აქ ნახო docs.python.org/library/string.html

6.11 Format operator

ფორმატ ოპერატორი % სტრინგის შედგენის საშუალებას გვაძლევს, სტრინგის ნაწილების შეცვლა ცვლადებში შენახული მონაცემებით. როცა საქმე მიდგება მთელ რიცხვებზე % არის  მოდულის ოპერატორი, მაგრამ როცა პირველი ოპერანდი სტრინგია, % არის ფორმატ ოპერატორი.
პირველი ოპერანდი არის ფორმატ სტრინგი, რომელიც შეიცავს 1 ან მეტ თანმიმდევრობას (sequences) რომ მიუთითოს როგორ დაფორმატირდეს მეორე ოპერანდი. შედეგი სტრინგია.
მაგალითად, ფორმატი '%d' ნიშნავს, რომ მეორე ოპერანდი უნდა დაფორმატირდეს როგორც მთელი რიცხვი (d  იშიფრება როგორც "ათობითი" "decimal"):

>>> camels = 42
>>> '%d' % camels
'42'

შედეგია სტრინგი '42', რომელიც არაა მთელი რიცხვი 42.
ფორმატ სტრინგი შეიძლება გამოჩნდეს  ყველგან სტრინგში, ასე რომ შეგიძლია ჩასვა ყველგან წინადადებაში:

>>> camels = 42
>>> 'I have spotted %d camels.' % camels
'I have spotted 42 camels.'

სტრინგში ორზე მეტი ფორმატი თუ არის, მეორე არგუმენტი უნდა იყოს tuple. ყოველი ფორმატი შესაფერისია tuple - ის ელემენტთან რიგის მიხედვით.
შემდეგ მაგალითში  ვიყენებთ '%d' მთელ რიცხვად გადასაფორმატებლად, '%g' - ს წილადად გადასაფორმატებლად (არ მკითხო რატო) და '%s' სტრინგად გადასაფორმატებლად:

>>> 'In %d years I have spotted %g %s.' % (3, 0.1, 'camels')
'In 3 years I have spotted 0.1 camels.'

tuple  - ში ელემენტების რაოდენობა უნდა დაემთხვეს სტრინგში ფორმატების რაოდენობას. ასევე ელემენტის ტიპები უნდა დაემთხვეს ფორმატებს:

>>> '%d %d %d' % (1, 2)
TypeError: not enough arguments for format string
>>> '%d' % 'dollars'
TypeError: illegal argument type for built-in operation

პირველ მაგალითში არაა საკმარისი ელემენტები; მეორეში - ელემენტების არასწორი ტიპია.

ფორმატ ოპერატორი მაგარია, მაგრამ მისი გამოყენება ცოტა რთულია. ამის შესახებ მეტის წაკითხვა შეგიძლია ამ მისამართზე:  docs.python.org/lib/typesseq-strings.html