radera raw filer

Här diskuterar vi skal, kommandon och klassiska linuxverktyg.
Användarvisningsbild
Dimi
Inlägg: 703
Blev medlem: 24 dec 2006, 00:04
OS: Ubuntu
Utgåva: Vet inte/ingen utgåva passar
Ort: Stockholm

radera raw filer

Inlägg av Dimi »

Hej!

När jag fotograferar så tar jag både raw och jpg bilder. När jag gått igenom alla bilderna så raderar jag de jpgar som ser dåliga ut. Sedan så raderar jag alla tillhörande rawfiler.

Jag skulle vilja ha ett skript som gör detta åt mig och har funnit detta:
https://gist.github.com/pklaus/4271012
Med en liten modifiering så att det passar mitt filformat (nef) så känns det som det borde kunna göra jobbet. Men jag får ett felmeddelande:
File "/home/mats/bin/remove_raw.py", line 15
sys.stderr.write(line + '\n')

Någon som kan hjälpa mig att lista ut vad som är fel?
Användarvisningsbild
Osprey
Inlägg: 6310
Blev medlem: 06 apr 2008, 00:09
OS: Ubuntu
Ort: Göteborg/Mölndal/Falkenberg
Kontakt:

Re: radera raw filer

Inlägg av Osprey »

Programmet så som det ser ut på githuben är helt ok, det skulle vara bra om du kan lägga in en kopia av ditt ändrade program som du försöker köra också. Python är väldigt känsligt för en del smådetaljer som inte spelar någon roll i andra språk.
Agera genom att ta och behålla initiativet, ta de risker detta kräver...
http://www.enargo.com/it/
OpenVMS Shark - i Linux finns inte SYS$CMKRNL...
Användarvisningsbild
Dimi
Inlägg: 703
Blev medlem: 24 dec 2006, 00:04
OS: Ubuntu
Utgåva: Vet inte/ingen utgåva passar
Ort: Stockholm

Re: radera raw filer

Inlägg av Dimi »

Jag förstår. Här är koden. Min enda förändring är den gällande filformatet på rad 35. Där jag ändrar cr2 till nef.

Kod: Markera allt

#!/usr/bin/env python2.7
# -*- coding: utf-8 -*-
 
"""
Written on 2012-12-12 by Philipp Klaus <philipp.l.klaus →AT→ web.de>.
Check <https://gist.github.com/4271012> for newer versions.
 
Also check <https://gist.github.com/3155743> for a tool to
rename JPEGs according to their EXIF shot time.
"""
 
import argparse, os, errno, re, shutil, sys
 
def stderr(line):
sys.stderr.write(line + '\n')
sys.stderr.flush()
 
def delete(files, backup_folder=None, verbose=True):
if len(files) == 0: return
if backup_folder:
try:
os.mkdir(backup_folder)
except OSError, e:
if not e.errno == errno.EEXIST:
raise
for filename in files:
if verbose: print "Moving %s to %s." % (filename, backup_folder)
shutil.move(filename, os.path.join(backup_folder))
else:
for filename in files:
if verbose: print "Deleting %s." % (filename,)
os.remove(filename)
 
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Cleanup of leftover raw image files (*.NEF).')
parser.add_argument('-n', '--no-backup', action='store_true',
help='Don\'t backup orphaned raw images - delete them immediately.')
parser.add_argument('-b', '--backup-folder', default='raw_orphans',
help='Folder to move orphaned raw images to.')
parser.add_argument('-q', '--quiet', action='store_true',
help='Silence the less important output of this tool.')
parser.add_argument('folder', metavar='CHECK_FOLDER', default='./', nargs='?',
help='Folder to check for raw images. Defaults to the current working directory')
args = parser.parse_args()
verbose = not args.quiet
raw_images, jpeg_images_bare_names = [], []
all_files = list(os.listdir(args.folder))
# sort files into raw and jpeg files
for filename in all_files:
# The file name of raw image ends with cr2 for Canon cameras
if re.match(r'(.*)\.[cC][rR]2$', filename):
raw_images.append(filename)
if re.match(r'(.*)\.[jJ][pP][eE]?[gG]$', filename):
jpeg_images_bare_names.append(os.path.splitext(filename)[0])
# Check if there is a jpeg for each raw image
orphans = []
for raw_image in raw_images:
if os.path.splitext(raw_image)[0] not in jpeg_images_bare_names:
orphans.append(raw_image)
if len(raw_images) + len(jpeg_images_bare_names) == 0:
if verbose: stderr("No images found. Are you sure you wanted to check '%s' for orphaned RAW images?" %
(args.folder,))
sys.exit(2)
elif len(raw_images) == 0:
if verbose: print "No RAW images found, but %i JPEGs. Won't do anything now." % (
len(jpeg_images_bare_names),)
sys.exit(0)
elif len(orphans) == 0:
if verbose: print "%i RAW images found, and %i JPEGs but no orphans. Won't do anything now." % (
len(raw_images), len(jpeg_images_bare_names))
sys.exit(0)
backup_folder = None if args.no_backup else os.path.join(args.folder,args.backup_folder)
delete([os.path.join(args.folder,orphan) for orphan in orphans], backup_folder=backup_folder, verbose=verbose)
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

Re: radera raw filer

Inlägg av Johnny Rosenberg »

Ta även en titt på raderna 50-51…
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Användarvisningsbild
Osprey
Inlägg: 6310
Blev medlem: 06 apr 2008, 00:09
OS: Ubuntu
Ort: Göteborg/Mölndal/Falkenberg
Kontakt:

Re: radera raw filer

Inlägg av Osprey »

Dimi skrev:Jag förstår. Här är koden.
[...]
Det där fungerar inte alls, indenteringarna är ytterst viktigt för Python, med rak vänstermarginal är det helkört. I Python styrs programstrukturen helt av indenteringarna!

För att ta rad 15 som exempel så måste det se ut så här:

Kod: Markera allt

def stderr(line):
    sys.stderr.write(line + '\n')
    sys.stderr.flush()
...och inte så här:

Kod: Markera allt

def stderr(line):
sys.stderr.write(line + '\n')
sys.stderr.flush()
Om du tar https://gist.github.com/pklaus/4271012 och kopierar den rakt av så ska det funka. Om du textkopierar den så är "gedit" ett bra val att klistra in den i och sedan spara ("vim/gvim" m.fl kan stöka till det pga. "autoindent")...
Agera genom att ta och behålla initiativet, ta de risker detta kräver...
http://www.enargo.com/it/
OpenVMS Shark - i Linux finns inte SYS$CMKRNL...
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

Re: radera raw filer

Inlägg av Johnny Rosenberg »

Osprey skrev:
Dimi skrev:Jag förstår. Här är koden.
[...]
Det där fungerar inte alls, indenteringarna är ytterst viktigt för Python, med rak vänstermarginal är det helkört. I Python styrs programstrukturen helt av indenteringarna!
Inte för att jag har något med saken att göra, men jag misstänker att indenteringarna försvunnit när vederbörande klistrat in koden här. Själv brukar jag alltid göra nya indenteringar för att göra koden lättläst, men alla är inte så nogräknade och petiga som jag…

Just Python har jag aldrig använt, mer än testat det lite, men jag har läst lite om det och också förstått att indenteringarna är avgörande. Dessutom måste de väl göras med mellanslag, stämmer det? Lite synd i så fall, personligen föredrar jag tab. Lättare att jobba med, i alla fall i de textredigerare jag använt. Och tar mindre plats, men det spelar mindre roll.
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Användarvisningsbild
Dimi
Inlägg: 703
Blev medlem: 24 dec 2006, 00:04
OS: Ubuntu
Utgåva: Vet inte/ingen utgåva passar
Ort: Stockholm

Re: radera raw filer

Inlägg av Dimi »

Tack för hjälpen! Det var det som var problemet. Skönt att det löste sig så lätt.

Väldigt trevligt script nu när det fungerar :-).
Skriv svar

Återgå till "Terminalforum"