Sida 1 av 1

radera raw filer

Postat: 24 nov 2013, 22:44
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?

Re: radera raw filer

Postat: 24 nov 2013, 23:11
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.

Re: radera raw filer

Postat: 24 nov 2013, 23:21
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)

Re: radera raw filer

Postat: 25 nov 2013, 00:14
av Johnny Rosenberg
Ta även en titt på raderna 50-51…

Re: radera raw filer

Postat: 25 nov 2013, 00:35
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")...

Re: radera raw filer

Postat: 25 nov 2013, 17:59
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.

Re: radera raw filer

Postat: 26 nov 2013, 22:54
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 :-).