Ich hab noch keine Zeile (außer zu MS Dos Zeiten (auch komplexe Batch Dateien)) je gecodet, würde folgendes Problem als Einstieg gerne in Python lösen
Aufgabe:
Im Folder A liegen X Files, die gelistet (linker Bildbereich) und wie im rechten Bildbereich dargestellt ausgegeben werden sollen. Benötigt wird das Ganze für ein an anderer Stelle angesprochenen Python Script namens noteshrink.
Im Moment wird das Ganze unter Windows mit Printfolder Pro zum erstellen der ersten Liste gelöst. Das Resultat wird dann in einen Editor kopiert um dort ^p durch ein Leerzeichen zu ersetzen.
geht das und wenn ja wie?
wie schreibt man so ein Listenscript?
Was wir an Niedern rühmen als Geduld, ist blasse Feigheit in der Brust - William Shakespeare
@Togijak: ausgeben muß man da überhaupt nichts, denn normalerweise erledigt man solch eine Aufgabe einfach mit einer Schleife:
Code: Alles auswählen
from glob import iglob
IMAGE_PATTERN = "C:/.../*.jpg"
for filename in iglob(IMAGE_PATTERN):
do_something_with_the_image(filename)
@Sirius3
Antwort eines coding
wir haben uns vielleicht missverstanden denn
= man gibt z.B. python noshrink.py -w 001.jpg 002.jpg usw. ein und erhält dann
Antwort eines coding
wir haben uns vielleicht missverstanden denn
Code: Alles auswählen
usage: noteshrink.py [-h] [-q] [-b BASENAME] [-o PDF] [-v PERCENT]
[-s PERCENT] [-n NUM_COLORS] [-p PERCENT] [-w] [-g] [-S]
[-K] [-P POSTPROCESS_CMD] [-e POSTPROCESS_EXT] [-O] [-C]
[-Q] [-c COMMAND]
IMAGE [IMAGE ...]
convert scanned, hand-written notes to PDF
positional arguments:
IMAGE files to convert
optional arguments:
-h, --help show this help message and exit
-q reduce program output
-b BASENAME output PNG filename base (default page)
-o PDF output PDF filename (default output.pdf)
-v PERCENT background value threshold % (default 25)
-s PERCENT background saturation threshold % (default 20)
-n NUM_COLORS number of output colors (default 8)
-p PERCENT % of pixels to sample (default 5)
-w make background white
-g use one global palette for all pages
-S do not saturate colors
-K keep filenames ordered as specified; use if you *really*
want IMG_10.png to precede IMG_2.png
-P POSTPROCESS_CMD set postprocessing command (see -O, -C, -Q)
-e POSTPROCESS_EXT filename suffix/extension for postprocessing command
-O same as -P "optipng -silent %i -out %o"
-C same as -P "pngcrush -q %i %o"
-Q same as -P "pngquant --ext %e %i"
-c COMMAND PDF command (default "convert %i %o")
Was wir an Niedern rühmen als Geduld, ist blasse Feigheit in der Brust - William Shakespeare
@Togijak: Deswegen muss man immer noch nichts ausgeben. Du willst das noteshrink-Programm ja aufrufen. Das macht man mit dem `subprocess`-Modul und der entsprechenden Funktion übergibt man Programmnamen und Argumente als Liste. Also brauchst Du `glob.glob()` um die Liste mit den Dateinamen zu erstellen, beziehungsweise `glob.iglob()` für einen Iterator der die Dateinamen liefert und mit dem man dann die Liste mit den anderen Argumenten um die Dateinamen erweitern kann.
Wenn man sich das `noshrink`-Modul mal näher anschaut, braucht man das noch nicht einmal über `subprocess` als zusätzlichen externen Prozess starten. Man kann es auch importieren, sich von der `get_argument_parser()`-Funktion den `argparse.ArgumentParser` erstellen lassen, dessen `parse_args()`-Methode eine erstellte Liste mit den Argumenten übergeben, und dann mit dem Rückgabwert `notescan_main()` aufrufen.
Ich habe den Verdacht das hier ein Problem gelöst werden soll, das man durch die Verwendung einer vernünftigen Shell nicht hätte. Unter Windows wäre das ”nativ” zum Beispiel die PowerShell. Wenn es die nicht gibt, würde ich schauen das man sie nachinstalliert bekommt. Falls das nicht geht, würde ich Cygwin oder MinGW installieren um eine Bash zu haben. Dann würde man einfach ``python noteshrink
.py -w *.jpg`` ausführen um alle JPG-Dateien in dem Ordner zu konvertieren.
Wenn man sich das `noshrink`-Modul mal näher anschaut, braucht man das noch nicht einmal über `subprocess` als zusätzlichen externen Prozess starten. Man kann es auch importieren, sich von der `get_argument_parser()`-Funktion den `argparse.ArgumentParser` erstellen lassen, dessen `parse_args()`-Methode eine erstellte Liste mit den Argumenten übergeben, und dann mit dem Rückgabwert `notescan_main()` aufrufen.
Ich habe den Verdacht das hier ein Problem gelöst werden soll, das man durch die Verwendung einer vernünftigen Shell nicht hätte. Unter Windows wäre das ”nativ” zum Beispiel die PowerShell. Wenn es die nicht gibt, würde ich schauen das man sie nachinstalliert bekommt. Falls das nicht geht, würde ich Cygwin oder MinGW installieren um eine Bash zu haben. Dann würde man einfach ``python noteshrink
.py -w *.jpg`` ausführen um alle JPG-Dateien in dem Ordner zu konvertieren.
@BlackJack
*grins* denn selbst unter WinDOOF gibt es die PowerShell, ich verwende allerdings fast immer Take Command (reine Bequemlichkeit da Shortcut mit Adminrechten in der Taskleiste). Auf jeden Fall werde ich versuchen den Ratschlägen zu folgen / sie umzusetzen.
Bei der Gelegenheit mal allen die sich hier antwortenderweise als hilfreich erwiesen haben
je 3 Flaschen
*grins* denn selbst unter WinDOOF gibt es die PowerShell, ich verwende allerdings fast immer Take Command (reine Bequemlichkeit da Shortcut mit Adminrechten in der Taskleiste). Auf jeden Fall werde ich versuchen den Ratschlägen zu folgen / sie umzusetzen.
Bei der Gelegenheit mal allen die sich hier antwortenderweise als hilfreich erwiesen haben
je 3 Flaschen
Was wir an Niedern rühmen als Geduld, ist blasse Feigheit in der Brust - William Shakespeare
das geht nicht
python noteshrink.py -w *.jpg
warning: error opening *.jpg
Was wir an Niedern rühmen als Geduld, ist blasse Feigheit in der Brust - William Shakespeare
@Togijak: In einer vernünftigen Shell sollte das aber gehen. Ausser wenn in dem Verzeichnis in dem man das ausführt gar keine Dateien mit der Endung .jpg liegen natürlich.
egal, unter bestimmten Bedingungen ist noteshrink nicht so genial wie man nach einem ersten Eindruck erwartet = es funktioniert ja mit der Windows Listen Lösung[D:\]cd work 3
[D:\Work 3]powershell
Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. Alle Rechte vorbehalten.
PS D:\Work 3> python noteshrink.py -w *.jpg
warning: error opening *.jpg
running PDF command "convert output.pdf"...
Ungültige Laufwerkangabe.
warning: PDF command failed
PS D:\Work 3>
Was wir an Niedern rühmen als Geduld, ist blasse Feigheit in der Brust - William Shakespeare
@Togijak: Das hat nichts mit noteshrink zu tun, sondern das Windows-Shells doof sind. Ich hatte echt gedacht die PowerShell macht das ”globbing” und überlässt das nicht den Programmen die es startet. Aber die Shell scheint genau so unfreundlich zu sein wie die Shells für DOS die von Microsoft kommen/kamen.
@Togijak: im Gegensatz zu normalen Shells muß man bei der PowerShell den Umweg über ein List-Dir machen:
[codebox=powershell file=Unbenannt.ps1]
PS D:\Work 3> python noteshrink.py -w (ls *.jpg | %{ $_.FullName })
[/code]
Sowas ist dann auch gleich viel mächtiger, denn Du kannst statt dem Dateinamen auch das Änderungsdatum übergeben (wer immer das auch braucht).
[codebox=powershell file=Unbenannt.ps1]
PS D:\Work 3> python noteshrink.py -w (ls *.jpg | %{ $_.FullName })
[/code]
Sowas ist dann auch gleich viel mächtiger, denn Du kannst statt dem Dateinamen auch das Änderungsdatum übergeben (wer immer das auch braucht).