🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.python
4 messages
4 total messages Started by Wojtek Walczak Sun, 08 Dec 2002 16:35
prostszy os.path.splitext
#287
Author: Wojtek Walczak
Date: Sun, 08 Dec 2002 16:35
76 lines
2713 bytes
Dobry wieczor :)

Sprawa Pierwsza.
Oto funkcja splitext z pythona 2.2.2 z posixpath.py:

---
def splitext(p):
    """Split the extension from a pathname.  Extension is everything from the
    last dot to the end.  Returns "(root, ext)", either part may be empty."""
    root, ext = '', ''
    for c in p:
        if c == '/':
            root, ext = root + ext + c, ''
        elif c == '.':
            if ext:
                root, ext = root + ext, c
            else:
                ext = c
        elif ext:
            ext = ext + c
        else:
            root = root + c
    return root, ext
---

...ja sobie napisalem to samo w ten sposob:

---
def splitext(p):
   a = p.rfind('.')
   if a == -1: a=len(p)
   return p[:a], p[a:]
---

...no i ciekaw jestem o czym zapomnialem, bo jak zawsze na pewno jest
cos, o czym nie pomyslalem, i czego nie widze. Jakies pomysly? :)

ps. testuje to tak:

---
tabl = [ "/nie/ma/kropek",
         "mat.rix",
         "///q.exe",
         "/home/gminick/wojo.txt",
         ".blah",
         "/home/gminick/.slrnrc" ]

for i in tabl:
   print splitext(i)
   print os.path.splitext(i)
---

...i w kazdym wypadku wyniki sa identyczne.


Sprawa druga.
Zmienilem sobie troche os.path.join(), tak, zeby zamienial slashe
wystepujace grupami na slasha pojedynczego (dwie linijki kodu roznicy 
nie liczac 'import re' ;)), np.:

print moj_join("/home////", "gminick/////Mail", "sent")
print os.path.join("/home////", "gminick/////Mail", "sent")

i wyniki:

/home/gminick/Mail/sent
/home////gminick/////Mail/sent

...i sie teraz zastanawiam, czy sa sytuacje, kiedy takie zastepowanie
slashy moze sie okazac niebezpieczne/niepozadane ?

To by bylo na tyle, dobranoc ;]

-- 
[ ] gminick (at) underground.org.pl  http://gminick.linuxsecurity.pl/ [ ]
[ "Po prostu lubie poranna samotnosc, bo wtedy kawa smakuje najlepiej." ]
Re: prostszy os.path.splitext
#288
Author: Adam Karpierz
Date: Sun, 08 Dec 2002 17:25
28 lines
1772 bytes
Użytkownik "Wojtek Walczak" <gminick@hacker.pl> napisał:

> ...i w kazdym wypadku wyniki sa identyczne.

Niekoniecznie.
Sprawdz sobie dla np:

/home/lala.lala/zbiorek_bez_rozszerzenia

> Zmienilem sobie troche os.path.join(), tak, zeby zamienial slashe
> wystepujace grupami na slasha pojedynczego (dwie linijki kodu roznicy
> nie liczac 'import re' ;)), np.:

Nie ma potrzeby nic nowego pisac ani zmieniac.
Zmienianie powinno byc nawet surowo karane ;)
Wszysko potrzebne znajdziesz w os.path.

Aby w pelni znormalizowac sciezke uzyj np.

def normalize(pth):
    return os.path.abspath(os.path.normcase(os.path.normpath(pth)))

Pamietaj tylko ze o ile normpath i normcase abspath uzywaja tylko
'bebechow' konfiguracyjnych samego Pythona to abspath wymaga
juz fizycznego dostepu do dysku.

--
Adam Karpierz
Re: prostszy os.path.splitext
#289
Author: Wojtek Walczak
Date: Sun, 08 Dec 2002 18:06
46 lines
2426 bytes
Dnia Sun, 8 Dec 2002 18:25:44 +0100, Adam Karpierz napisał(a):
>> ...i w kazdym wypadku wyniki sa identyczne.
> Niekoniecznie.
> Sprawdz sobie dla np:
>/home/lala.lala/zbiorek_bez_rozszerzenia
Wieeedzialem, ze o czyms zapomnialem, dzieki ;)

def splitext(p):
   a = p.rfind('.')
   if a == -1: a=len(p)
   if p[a:].count("/"): 
      return p, ''
   return p[:a], p[a:]

...a teraz ? 

>> Zmienilem sobie troche os.path.join(), tak, zeby zamienial slashe
>> wystepujace grupami na slasha pojedynczego (dwie linijki kodu roznicy
>> nie liczac 'import re' ;)), np.:
> Nie ma potrzeby nic nowego pisac ani zmieniac.
> Zmienianie powinno byc nawet surowo karane ;)
Proponuje przepisanie modulu sto razy nie zmieniajac ani jednego bajtu ;)

> Wszysko potrzebne znajdziesz w os.path.
Wiem, wiem, znam ten modul na pamiec :)
os.path.normpath robi co powinno, ale strasznie jest ta funkcja pogmatwana.
Oto jak zmienilem os.path.join:

---
def join(a, *p):
    """Join two or more pathname components, inserting '/' as needed"""
    path = re.sub("[/]+", "/", a) # TU
    for b in p:
        b = re.sub("[/]+", "/", b) # i TU
---

...a reszta po staremu.

Jeszcze raz dzieki za wskazanie tego bledu zwiazanego z moim splitext.

ps. pisze to wszystko oczywiscie tylko dla zabawy, jak przychodzi
    co do czego to i tak uzywam standardowych modulow ;]

-- 
[ ] gminick (at) underground.org.pl  http://gminick.linuxsecurity.pl/ [ ]
[ "Po prostu lubie poranna samotnosc, bo wtedy kawa smakuje najlepiej." ]
Re: prostszy os.path.splitext
#290
Author: Wojtek Walczak
Date: Sun, 08 Dec 2002 19:03
9 lines
1380 bytes
Dnia Sun, 8 Dec 2002 17:58:50 +0100, Adam Buraczewski napisał(a):
>> ...no i ciekaw jestem o czym zapomnialem, bo jak zawsze na pewno jest
>> cos, o czym nie pomyslalem, i czego nie widze. Jakies pomysly? :)
> Zapomniałeś o katalogu z kropką w nazwie :)
Na szczescie ten blad zostal juz wyeliminowany, dzieki :)

-- 
[ ] gminick (at) underground.org.pl  http://gminick.linuxsecurity.pl/ [ ]
[ "Po prostu lubie poranna samotnosc, bo wtedy kawa smakuje najlepiej." ]
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads