Hallo Leute,
ich hab n kleines Script geschrieben (Linux) welches mir automatisch durch auslesen der MP3-Tags die MP3-Dateien umbenennt. Nun will ich aber nicht das Script für jedes File einzelen aufrufen, sondern Zb auch ein *.*, *.mp3 etc zulassen.
Gibts dafür eigne Möglichkeit, dass ALLE möglichkeiten, die die Bash bietet (also *.*, ?, etc) umgesetzt werden ohne dafür selber einen Parser zu schreiben?
Danke schonmal für Eure Hilfe und n frohes und ruhiges Osterfest
*.* etc über Programmparameter?
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Das macht deine Shell schon von sich aus, der Spaß heist ja nicht umsonst Shell Expansion. Also mal zwei Zeilen Code:
War zwar keine Bash, sondern eine ZSH, aber das Konzept ist das gleiche. Einfach aber praktisch.
Ich wünsch dir auch schöne Ostern.
Code: Alles auswählen
import sys
print sys.argv
Code: Alles auswählen
$ python shellargs.py *.pyc
['shellargs.py', 'entropy.pyc', 'iopsqrt.pyc', 'mathfun.pyc', 'matrix.pyc', 'ocnprimes.pyc', 'primebench.pyc', 'tkturtle.pyc']
Ich wünsch dir auch schöne Ostern.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Dh heisst wenn ich zB "mp3tag.py *.mp3" aufrufe bedeutet das, dass er das Script xx-mal aufruft, oder wie soll ich das verstehen?
Sorry wenn ich bisschen dumm frage, aber ich habe noch nicht viel in Python gemacht, und da bin ich schonb froh das das kleine Projekt jetzt soweit klappt wie ich mir es vorstelle
Weil moemntan nehme ich ja sys.argv[1] oder wars 0? Und dann mache ich n Open-Befehl auf den Variableninhalt!
Sorry wenn ich bisschen dumm frage, aber ich habe noch nicht viel in Python gemacht, und da bin ich schonb froh das das kleine Projekt jetzt soweit klappt wie ich mir es vorstelle
Weil moemntan nehme ich ja sys.argv[1] oder wars 0? Und dann mache ich n Open-Befehl auf den Variableninhalt!
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Hi!
In sys.argv stehen die Argumente, die Du deinem Script übergibst, wobei sys.argv[0] der Name des Scripts selbst ist. Wenn Du das Script so startest wie Leonidas es gezeigt hat, kannst Du z.B. folgendes machen:
Aufrufen mit
Jetzt sollten alle mp3-Files im Verzeichnis ausgegeben werden.
Gruß, mawe
In sys.argv stehen die Argumente, die Du deinem Script übergibst, wobei sys.argv[0] der Name des Scripts selbst ist. Wenn Du das Script so startest wie Leonidas es gezeigt hat, kannst Du z.B. folgendes machen:
Code: Alles auswählen
import sys
for song in sys.argv[1:]:
print song
Code: Alles auswählen
python scriptname.py *.mp3
Gruß, mawe
Ich weiß nicht, ob das Plattformübergreifen funktioniert, denn die Auflösung der Name wird unter unixoiden Systemen von der Shell erledigt, d.h. die Shell wandelt das um und gibt dann die aufgelösten Namen an das eigentliche Programm weiter. Unter Win war (ist?) das anders, da muss sich jedes Programm selber darum kümmern.Lvis hat geschrieben:Hallo Leute,
ich hab n kleines Script geschrieben (Linux) welches mir automatisch durch auslesen der MP3-Tags die MP3-Dateien umbenennt. Nun will ich aber nicht das Script für jedes File einzelen aufrufen, sondern Zb auch ein *.*, *.mp3 etc zulassen.
Gibts dafür eigne Möglichkeit, dass ALLE möglichkeiten, die die Bash bietet (also *.*, ?, etc) umgesetzt werden ohne dafür selber einen Parser zu schreiben?
Danke schonmal für Eure Hilfe und n frohes und ruhiges Osterfest
fs111
Pydoc-Integration in vim - Feedback willkommen: http://www.vim.org/scripts/script.php?script_id=910
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Naja, unter Windows ist das unter cmd.exe so, aber ich habe zsh.exe benutzt.fs111 hat geschrieben:Ich weiß nicht, ob das Plattformübergreifen funktioniert, denn die Auflösung der Name wird unter unixoiden Systemen von der Shell erledigt, d.h. die Shell wandelt das um und gibt dann die aufgelösten Namen an das eigentliche Programm weiter. Unter Win war (ist?) das anders, da muss sich jedes Programm selber darum kümmern.
Okay, ich guck mal, dass ich eine Regex-Lösung für dich hinbekomme, die auch das arme cmd.exe schluckt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Hier mal ein billiger Versuch (nicht vergessen, ich kann keine Regulären Ausdrücke, also könnten sie etwas buggy sein).
Ich habe es nur ein wenig getestet, so funtioniert * und ?, aber das war schon alles. Du kannst es aber problemlos erweitern, sollte ja nicht soo schwer sein, ich habs ja auch geschafft.
Code: Alles auswählen
#!/usr/bin/env python
# -*- encoding: latin-1 -*-
import sys, os, re
regex = sys.argv[1]
# translate Windows "regex" to PCRE
regex = regex.replace('*.', r'.*.')
regex = regex.replace('?', r'.')
files = os.listdir(os.getcwd())
rgx = re.compile(regex, re.IGNORECASE)
def matchregex(f):
if re.match(rgx, f):
return True
else:
return False
print filter(matchregex, files)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Meine Güte warum so umständlich... Für so etwas ist das 'glob'-Modul aus der Standardbibliothek da:
Code: Alles auswählen
In [10]: import glob
In [11]: glob.glob('*.py')
Out[11]: ['test.py', 'radioscan.py', 'BeautifulSoup.py']
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Gute Frage, man sollte Microsoft fragen warum deren Shells so schlecht sind, das sie das nicht selbst können.BlackJack hat geschrieben:Meine Güte warum so umständlich...
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice