Kezdőlap › Fórumok › Programozás › Python
- This topic has 27 hozzászólás, 14 résztvevő, and was last updated 16 years, 4 months telt el by
sipdav.
-
SzerzőBejegyzés
-
2009-02-11-09:58 #2029402
bocs, a kod:
Code:import sys
import re# ini-blok – hozzaadni valo directory path-ok
dirdict = {„[AQTOR dll]”: „AQTOR”,
„[AQTOR]”: „AQTOR”,
„[MaketSpecificDLLsNotSelgRegistered]”: „AQTOR”,
„[MarketSpecificDLLs]”: „AQTOR”,
„[Install Files]”: „Install”,
„[System dll]”: „C:WINDOWS”,
„[AQTOR Files]”: „AQTOR”
}
pre = ‘, „‘
pos = ‘”‘f = open(„iscab.ini”)
insect = 0
for line in f:
line = line.strip()
for k, v in dirdict.items():
if line == „”:
print line
break
elif re.match(‘\’ + k, line):
print line
insect = 1
break
elif not re.match(‘[‘, line) and insect == 1:
print line + pre + v + pos
break
elif re.match(‘[‘, line):
insect = 0
# break
else:
break2009-02-11-09:59 #2029403reszlet az ini-bol:
Code:[MaketSpecificDLLsNotSelgRegistered]
File1=”libeay32.dll”
File2=”ssleay32.dll”[MarketSpecificDLLs]
File1=”mtapi.dll”[Install Files]
File1=”ActivAMEX.reg”
File2=”ActivARCA.reg”
File3=”ActivBOX.reg”
File4=”ActivCBOE.reg”
File5=”activinfo.txt”
File6=”ActivISE.reg”
File7=”ActivPCX.reg”2009-02-11-10:45 #2029404„Általános Linux problémák”
(bocs)
2009-02-11-12:56 #2029405pontosan: Általános Linux problémák/Programozas/Python – szerintem nem off.
Az egy dolog, hogy a konkret pelda egy win-es ini fajlt parsol, de a feladat ugyanez linuxon is, nem? Ott is parsolsz config fajlokat (akar ini-t is)…Mindenesetre megoldottam kozben, aki kelloen Python-nak latja a kodot nezze meg 🙂
Code:import ConfigParserind = „”
dirdict = {„[AQTOR dll]”: „AQTOR”,
„[AQTOR]”: „AQTOR”,
„[MaketSpecificDLLsNotSelgRegistered]”: „AQTOR”,
„[MarketSpecificDLLs]”: „AQTOR”,
„[Install Files]”: „Install”,
„[System dll]”: „C:WINDOWS”,
„[AQTOR Files]”: „AQTOR”
}
pre = ‘, „‘
pos = ‘”‘try:
outf = open(‘iscab_result.ini’ , ‘w’)
except IOError:
print „Couldn’t open file ” + outf
sys.exit(1)config = ConfigParser.ConfigParser()
config.read(„iscab.ini”)for section in config.sections():
kkey = „[” + section + „]”
if kkey „[ISCAB Info]”:
outf.write(kkey + „n”)
for option in config.options(section):
try:
if kkey „[System dll]”:
outp = option + „=” + config.get(section, option) + ‘, „‘ + ind + „\” + dirdict[kkey] + ‘”‘ + „n”
else:
outp = option + „=” + config.get(section, option) + ‘, „‘ + dirdict[kkey] + ‘”‘ + „n”
outf.write(outp)
except:
pass2009-02-19-08:27 #2029406Sziasztok! Ujabb kerdesem lenne, ezuttal a ConfigParser modullal es a forras cfg fajlbol olvasas szuresevel kapcsolatban.
Azt szeretnem elerni az emlitett modul felhasznalasaval, hogy a commentek egyaltalan ne legyenek beolvasva. Guglizas utan sem talaltam a modulnak olyan funkciojat ami ezt lehetove teszi, pedig kezenfekvonek tunik. Masik otletem, hogy beolvasaskor regexp-el szurom a beolvasott dolgokat es group-olassal kiszedem. Nem igazan sikerult eddig, mert nehe tobb soros illeszkedest kell nezni az meg nem az erossegem. Bemasolom a sima – mindent beolvaso – kodot megkoszonom ha kiegeszititek a fenti szurest megvalosito resszel. Tehat semmilyen kommentet ne olvasson be.Code:import ConfigParserconfig = ConfigParser.ConfigParser()
config.read(„sample.cfg”)
for section in config.sections():
print section
for option in config.options(section):
print ” „, option, „=”, config.get(section, option)sample.cfg
Code:[valamiblokk]
egyebdefinicio = 128 ; kommentek
; tovabbi kommentek
; kb ilyen formaban ahogy latodmegintvalami = 192000 ; The maximum number of pricers to allocate
masvalamifdsfdsdfs = 25000 ; how often (in terms of pricing calls)
; to log cache usage statistics;; other parameters
DefaultCacheSize = 1024
VolaBucketSize = 0.001 ;
; MaxCacheMisses = 128
; MaxShiftRatio = 0.32009-02-19-08:37 #2029407Ahogy latom, ami nehezze teszi a regexp szurest (nekem), az az, hogy ugy vannak tobb soros kommentek, hogy pl. a „; kommentek” utan soremeles van, a kovetkezo sor TAB-okat es jopar SPACE-t tartalmaz mielott jonne a „; tovabbi kommentek”. Mellesleg a modul beolvasaskor alapbol kiszuri a kulcs-ertek parokkal egy sorban levo kommenteket (pl. „; kommentek”) ami jo, de meghagyja a sortores utaniakat (pl. „; tovabbi kommentek” es „; kb ilyen formaban ahogy latod”). Nekem ezek se kellenek mint ahogy a sor eleji kikommentezett sorok sem (pl. „; MaxCacheMisses = 128”).
Na, ez jo hosszu lett:)2009-02-20-10:55 #2029408Jobb hijjan regexp-el oldottam meg….
Code:def cfgCompare(file1,file2):”’ Compares two cfg files
Thia function compares file2 to file1 (base file).
If there are no differences returns 0 else 1. In case of exceptions (file opening,
key violation) returns 1 as well.
”’
SECTION = re.compile(‘^s*[s*([^]]*)s*]s*$’)
PARAM = re.compile(‘^s*(w+)s*=s*(.*)s*$’)
PARAMCOMMENT = re.compile(‘^[^;](.*)={1}(.*);.*$’)
COMMENT = re.compile(‘^.*;.*$’)
d = {}
t = {}
diffsect = {}
try:
f = open(file1)
f2 = open(file2)
except:
return 1
def iniprocess(file,tar):
for line in file:
m = SECTION.match(line)
if m:
section, = m.groups()
tar[section.strip()] = {}
m = PARAMCOMMENT.match(line)
if m:
key, val = m.groups()
tar[section][key] = val
if COMMENT.match(line):
continue
m = PARAM.match(line)
if m:
key, val = m.groups()
tar[section][key.strip()] = val.strip()iniprocess(f,d)
iniprocess(f2,t)
try:
for k in d.keys():
diffsect[k] = {}
for i in d[k].keys():
diffsect[k][i] = {}
if d[k][i] t[k][i]:
diffsect[k][i] = d[k][i]
except KeyError:
return 1
if (diffsect.__len__()) == 0:
return 0
else:
return 12009-12-04-19:57 #1880659Hy!
Hogyan lehet azt megoldani, hogy egy .py kiterjesztésû file ne pl. a KWriteban nyíljon meg, hanem a python értelmezõ „értelmezze”, majd nyisson neki egy ablakot, ahol lefuttatja? -
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.
legutóbbi hsz