erstes Script in Python

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
5inch
User
Beiträge: 14
Registriert: Dienstag 5. April 2011, 08:07
Wohnort: München

Freitag 8. April 2011, 10:43

Hallo Forum,

ich bin hier neu und auch noch nicht so lange dabei mich in Python einzuarbeiten.
Meine Programmiervorkenntnisse bei einer Skala von 0--->10 liegen bei glaube ich 3.
Ok, soviel zu mir, - erstmal.
Um besser in Python rein zu kommen habe ich mir ein paar kleine Aufgaben gestellt, die
ich gerne mit Python lösen möchte.

Ich habe also mein erstes Programm in Python angelegt, es läuft soweit, allerdings
würde ich mich riesig darüber freuen, wenn einer von Euch Profis sich das Script
einmal ansieht und mir sagt, was ich besser machen kann.

Scriptbeschreibung:
Das Script liest einfach eine ASCII-Datei aus und legt anhand einer Schleife Ordner im
Script-Ordner an.

Hier also der Code:

Code: Alles auswählen

import os
#import wx --- i will do a gui with wx later...

dir_hb=os.getcwd()

print ('\nFolder created in ' + dir_hb + '\n')

#reading the folder names from the file#

fob=open('c:/test/a.txt', 'rt')
var1=fob.readlines()
var2=len(var1)
var3=1
fob.close()

#digit-size#

if var2 < 10:
    var3=1
elif var2 >10 and var2 < 100: 
    var3=2
elif var2 >100 and var2 < 1000:
    var3=3
else:
    var3=4

#formating the folder, convert array to string#

for i, v in enumerate(var1):
    num= str(i)
    numA = v.rstrip('\n')                       ### removing the \n'            ###
    num1 = numA.replace(' ','_')                ### replacing blank with '_'    ###
    num2=(num.zfill(var3))                      ### adding the digits           ###
    dirNew_hb = (num2 + '_' + num1)
    print (dir_hb + '\\' + dirNew_hb)
    os.mkdir(dir_hb + '\\' + dirNew_hb)         ### creating the folder ###

und die ASCII-Datei:

Code: Alles auswählen

hund und schlange
katze
maus
ente
giraffe
freu mich auf Euer feedback.

sG, 5inch
...It isn’t about how hard you hit, it's about how hard you can get hit and keep moving forward. How much can you take and keep moving forward? That's how winning is done. ----Rocky Balboa
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Freitag 8. April 2011, 10:57

Variablennamen. Wenn ich eine Variable irgendwo sehe, dann muss ich am Namen erkennen können, was darin gespeichert wird. `var1`ist ungefähr so, als würde ich dich fragen "Welche eine Bedeutung hat var1?" und du würdest mit "Ja" antworten :-)

Ebenso `fob`, `dir_hb` und so weiter.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Freitag 8. April 2011, 11:01

Zudem solltest du dir das "os.path" Modul mal genauer ansehen, insbesonderem http://docs.python.org/library/os.path. ... .path.join

Über Dateien kann man auch direkt iterieren und man sollte spätestens ab Python 2.6 diese mit with öffnen:

Code: Alles auswählen

with open(filename, mode) as fileobject:
    for line in fileobject:
        print line
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
deets

Freitag 8. April 2011, 11:26

Noch ein paar Sachen mehr:

- Kommentare, die nichts anderes beschreiben, als was der Code in derselben Zeile tut, sind sinnlos.ZB os.mkdir gefolgt von einem "create folder".
- das Padding kann man deutlich besser machen. Versuch doch mal, eine Funktion zu schreiben, die dir fuer jede gegebene Zahl (jede!) die Anzahl der Stellen im Dezimalsystem ausgibt.
Benutzeravatar
5inch
User
Beiträge: 14
Registriert: Dienstag 5. April 2011, 08:07
Wohnort: München

Freitag 8. April 2011, 11:50

hallo
@Dauerbaustelle, Xynon1, deets,

ich danke Euch, super feedback... ich werd mir das gerne
heute abend mal zur Brust nehmen.
hab ich mir doch gedacht, dass mir das was bringt hier zu "posten"...

merci,

@deets:

>>>- das Padding kann man deutlich besser machen. Versuch doch mal, eine Funktion zu schreiben, die dir fuer jede gegebene Zahl (jede!) die Anzahl der Stellen im Dezimalsystem ausgibt.
<<<
ist mir noch nicht ganz klar warum, dazu meld ich mich
dann gerne noch mal, wenn ich dass ausprobiet habe....

@allen:
schreib das Script
dann mal am WE um und stells nochmal rein.

sG, 5inch
...It isn’t about how hard you hit, it's about how hard you can get hit and keep moving forward. How much can you take and keep moving forward? That's how winning is done. ----Rocky Balboa
Benutzeravatar
5inch
User
Beiträge: 14
Registriert: Dienstag 5. April 2011, 08:07
Wohnort: München

Freitag 8. April 2011, 11:52

@deets:
also, ich meine wie ich die Funktion schreibe, da
muss ich noch etwas in den Büchern stöbern...

danke für die Tipps...
...It isn’t about how hard you hit, it's about how hard you can get hit and keep moving forward. How much can you take and keep moving forward? That's how winning is done. ----Rocky Balboa
Benutzeravatar
b.esser-wisser
User
Beiträge: 272
Registriert: Freitag 20. Februar 2009, 14:21
Wohnort: Bundeshauptstadt B.

Freitag 8. April 2011, 13:29

Sollte das Script so aussehen/funktionieren?

Code: Alles auswählen

#!python3.2
import os

DATA_FILE = r'a.txt' # Pfad anpassen!

def main():
    cwd = os.getcwd()
    print("Creating Folder in '{:s}'".format(cwd))
    with open(DATA_FILE, 'rt') as names_file:
        for line_number, line in enumerate(names_file):
            folder_name = "{number:d}_{name}".format(
              number=line_number,
              name=line.rstrip("\n").replace(" ", "_")
            )
            print("Creating folder '{}'".format(folder_name))
            new_folder = os.path.join(cwd, folder_name)
            os.mkdir(new_folder)

if __name__ == "__main__":
    main()
Mir ist noch unklar, was du mit dem zfill()-erreichen willst .

Ps.: warum ich überhaupt antworte? ich übe python3 ;)
Benutzeravatar
5inch
User
Beiträge: 14
Registriert: Dienstag 5. April 2011, 08:07
Wohnort: München

Freitag 8. April 2011, 14:01

...puhh....

hallo b.esser-wisser,

sieht sauber aus, danke, muss ich mir mal
in Ruhe rein ziehen, was Du da feines gemacht hast.

Danke schon mal, klasse Sache.

Die Paddings sind einfach eine Nummerierung, damit die
Ordner sich nicht alphabetisch durchsortieren.

sG, 5inch
...It isn’t about how hard you hit, it's about how hard you can get hit and keep moving forward. How much can you take and keep moving forward? That's how winning is done. ----Rocky Balboa
Antworten