TI:WTBD/Ćwiczenia 6

Transkrypt

TI:WTBD/Ćwiczenia 6
TI:WTBD/Ćwiczenia 6
Zadanie -- ,,kartkówka":
napisać program, który posortuje linie strumienia tekstowego według ich długości, liczonej w
znakach (unikodowych) z pominięciem ew. znaków pustych na początku i końcu linii;
kodowanie może być podane jako argument opcji wywołania -e, domyślnie przyjmujemy UTF-8;
linie o tej samej długości sortuje w porządku ,,leksykograficznym".
Przykład rozwiązania:
#! /usr/bin/python
# coding: utf-8
from fileinput import input
from optparse import OptionParser
parser = OptionParser()
parser.add_option('-e', '--encoding', dest='encoding', default='utf-8')
opts, args = parser.parse_args()
enc = opts.encoding
def keyfun(line):
s = line.decode(enc).strip()
return len(s), s
lines = sorted(input(args), key=keyfun)
for l in lines:
print l,
Funkcja keyfun, wyznaczająca klucz sortowania, zwraca dwuelementową krotkę (tuple) składającą
się z długości linii, i samej treści linii (po przekształceniu na napis unikodowy i oczyszczeniu ze
zbędnych znaków pustych, zgodnie z warunkami zadania). Korzystamy tutaj z faktu, że domyślne
sortowanie sekwencji wykorzystuje domyślny porządek kolejnych elementów -- a więc w tym
przypadku, będzie oparte w pierwszej kolejności na porządku długości linii (numerycznym), a w
drugiej -- na porządku leksykograficznym ich (zdekodowanej i oczyszczonej) treści. Uwaga: definicja
keyfun może korzystać z wartości zmiennej enc, zawierającej nazwę kodowania, ponieważ jest
wpisana w miejscu, w którym wartość tej zmiennej jest już znana. Zupełnie inaczej, niż w językach
statycznie kompilowanych! (tam kolejność definicji w pliku źródłowym nie gra roli).
Wyrażenia regularne w Pythonie
funkcja 're.compile'
'search' -- metoda i funkcja
mikro-grep w Pythonie (pygrep.py), do ćwiczenia składni wyrażeń regularnych w jej
dialekcie pythonowym
import re
from fileinput import input
from sys import argv
rx = re.compile(argv[1].decode('utf-8'), re.UNICODE)
for l in input(argv[2:]):
if rx.search(l.decode('utf-8')): print l,
'findall' -- metoda i funkcja. Parsowanie tekstu (wyodrębnianie interesujących
fragmentów) poprzez wykorzystanie ,,grup wychwytujących".

Podobne dokumenty