Pomoc s Pythonerm

ZU1234 zu1234 na seznam.cz
Pondělí Červen 13 15:45:12 CEST 2016


Možná jsem úplně nepochopil zadání.
A v souvislosti se zadáním jsem nepochopil řeči o syntaxi a rychlosti:

import os
for root, dirs, files in os.walk(r'c:\start_dir'):
     for f in files:
         ff = os.path.join(root, f)
         d =  os.path.split(root)[1]
         ffn = os.path.join(root, d + '-' + f)
         os.rename(ff, ffn)


Dne 13.6.2016 v 15:01 David Belohrad napsal(a):
> Vas skript by mohl vypadat napr takto:
>
> --------------------------------------------------------------------------------
> import os
> import shutil
>
> # directory to look for:
> dirl = "fook"
> # get list of all files in the directory fook
> dirlist = os.listdir(dirl)
> # create list of tuples of type (old-filename, newfilename)
> # these are raw filenames without path (hence tuple e.g ("test3", "fook-test3")
> oldtonew = zip(dirlist, map(lambda fle: "%s-%s" % (dirl, fle), dirlist))
> # append to all paths the correct directory
> correct = map(lambda (src,dst): (os.path.join(dirl, src), os.path.join(dirl, dst)), oldtonew)
> # now move all files
> map(lambda (src, dst): shutil.move(src, dst), correct)
> --------------------------------------------------------------------------------
>
> pripadne pokud z nej vysekame vsechny poznamky, ktere jsem tam napsal:
> --------------------------------------------------------------------------------
> import os
> import shutil
>
> dirl = "fook"
> dirlist = os.listdir(dirl)
> oldtonew = zip(dirlist, map(lambda fle: "%s-%s" % (dirl, fle), dirlist))
> correct = map(lambda (src,dst): (os.path.join(dirl, src), os.path.join(dirl, dst)), oldtonew)
> map(lambda (src, dst): shutil.move(src, dst), correct)
> --------------------------------------------------------------------------------
>
> tedy 4 radky srozumitelneho kodu. Samozrejme to neni o poctu radku kodu, ale o tom, jak dlouho
> to trva vykonat. Troufam si tvdit, ze skript kolegy Mraze je podstatne pomalejsi, nez to co jsem
> tady vyrobil (a co se da jeste zjednodusit, kdybych zapremyslel jeste trochu). Pokud ty dva skripty
> pustite na 100000 souborech, uvidite ten rozdil :) Samozrejme v tomto pripade je to trochu overkill,
> ale pokud delate napr. simulaci FIR filtru, nebo FFT z mnoha vzorku, asi bych se rozhodne vyvaroval
> for smycce. Python totiz umi byt neskutecne pomaly.
>
>
> Dalsi priklad mohu uvest jednoduchou ulohu. Mate 32megabajtu 8bitovych slov, a potrebujete udelat bit swap.
> Ceckari udelaji FOR loop v pythonu, vysledkem je, ze tech 32megabajtu trva asi 15 minut. Pouzijete-li 'lepsi'
> algoritmus, vysledek je podstatne rychlejsi, v tomto pripade pod sekundu:
>
> --------------------------------------------------------------------------------
> #!/usr/bin/env python
> import numpy as np
> import random
>
> print "Random array"
> size = 8
> a = np.random.randint(0,pow(2,size)-1,size=32768*1024)
> #a = np.array(xrange(256))
>
> print "Swapping"
>
> def bitswap(vect, size):
>      bitmask = tuple([pow(2,number) for number in xrange(size)])
>      revmask = tuple(reversed(bitmask))
>
>      def mapper(val):
> 	if val == 0:
> 	    return 0
> 	triggered = map(lambda whichbit: (val & whichbit) != 0, bitmask)
> 	target = [swap[0] for swap in filter(lambda item: item[1], zip(revmask,
> 							      triggered))]
> 	return reduce(lambda x,y: x+y, target)
>
>      return map(mapper,vect)
>
> # indexer
> print "Input array length: ", len(a)
> print a
> index = np.array(bitswap(range(256), 8))
> # lut-through output
> out = index[a]
> print "Output array length: ", len(out)
> print out
>
> print "Done"
> ----------------------------------------------------------------------
>
>
> Problem je v tom, ze ti co pisi pro python musi mit neco v hlave. V cecku se spousta
> algoritmickych veci promine, protoze je dabelsky rychle. Pokud chcete mit neco
> rychle (bez toho dabelsky) v Pythonu, musite se zamyslet nad tim, jak to inteligentne
> zakodovat, coz si myslim, ze vetsina ceckaru ... ma az na poslednim miste. Vyhodou
> pythonu je to, ze v nem (dabelsky) rychle nakodujete velmi funkcni aplikace bez toho,
> aby se clovek snizoval k nizsi urovni programovani (ne nadarmo se nove C++ zacina podobat pythonu :).
> K tomu navic jako bonus dostanete plne dynamicky jazyk s myriadou knihoven.
>
> V CERNu bezi na pythonu pomerne hodne sluzeb. Ja sam jej vyuzivam na ovladani svych zarizeni.
> V zadnem pripade nejsem python guru, spis elektronik, ktery zjistil, co vsechno se v tom da
> delat.
>
>
> tolik muj jeden svycarsky centim do diskuze (a prosim zadne flame, jen jsem
> chtel ukazat, v cem se ty dva pristupy lisi. samozrejme kazdy ma sve vyhody/nevyhody)
>
>
>
> .d.
>
>
>
>
> Miroslav Mraz <mrazik na volny.cz> writes:
>
>> Ano, já vím, že jsme se na tohle téma už bavili. Zkoumat výhody
>> funkcionálního programování budu až mi někdo představí alespoň jediný
>> prakticky použitelný algoritmus, u kterého bude patrné, že funkcionální
>> přístup k jeho naprogramování má nějakou (alespoň jednu) výhodu.
>>
>> Mrazík
>>
>> Dne 13.6.2016 v 12:38 Milan B. napsal(a):
>>> Ako povedal klasik: fortranovsky program sa da napisat v akomkolvek
>>> jazyku (http://web.mit.edu/humor/Computers/real.programmers).
>>>
>>> Python obsahuje mnoho prvkov prevzatych z funkcionalnych jazykov:
>>> zoznamy, funkcie vyssieho radu, lambda kalkulus... a z toho vyplyva iny
>>> styl programovania pre tych, ktori tieto vlastnosti vedia a chcu vyuzit.
>>>
>>> Keby ste si pozreli ten FP101 kurz o funkcionalnom programovani, ako som
>>> odporucal, tak by ste to v tom Pythone videli.
>>>
>>> -m-
>> _______________________________________________
>> HW-list mailing list  -  sponsored by www.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list




Další informace o konferenci Hw-list