Portál AbcLinuxu, 12. května 2025 08:10

Dotaz: Jak na shellovou expanzi v Pythonu ?

22.12.2005 15:59 amnesiac
Jak na shellovou expanzi v Pythonu ?
Přečteno: 62×
Odpovědět | Admin
Pro expanzi znaků * a ? jsem našel fci glob v modulu glob.

Pro expanzi znaku ~ a proměnných prostředí fce expanduser a expandvars v modulu os.path .

Jak ale na závorkovou {} expanzi ? Potřeboval bych něco jako:

for objednavka in glob('obj*.{edt,inh}'):
   zpracuj_objednavku(objednavka)
Rozdělovat to na tolik cyklů for, kolik je prvků v závorkách se mi fakt nechce.

Předem dík.

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

22.12.2005 17:40 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: Jak na shellovou expanzi v Pythonu ?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zkus to prohnat regulárním výrazem:
#!/usr/bin/env python
import os, re

filter = re.compile('obj.*(edt|inh)')
for file in os.listdir('.'):
  if not filter.match(file):
    continue
  print file
22.12.2005 17:55 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: Jak na shellovou expanzi v Pythonu ?
A asi by bylo lepší, kdyby to nerozlišovalo velká/malá, takže
filter = re.compile('obj.*(edt|inh)', re.IGNORECASE)
(mám dojem, že se tu nedávno něco podobného řešilo v bashi ...)
22.12.2005 18:48 amnesiac
Rozbalit Rozbalit vše Re: Jak na shellovou expanzi v Pythonu ?
Dík za tu kombinaci os.listdir a re.match, to mě nenapadlo.

Podle zadání bude regulární výraz nakonec vypadat asi takto:
'obj.*\.(edt|inh)$'

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.