簡體   English   中英

在樹目錄中檢測到但未重命名的文件(用於重命名)

[英]Files (for rename) detected but not renamed in tree directory

如何在所有子文件夾中應用腳本進行文件修改(在python中)?

我創建了一個小腳本來重命名某些圖片,但是我的程序僅更改腳本文件夾中的圖片,而不更改子文件夾中的圖片。

from PIL import Image
from os import *
import sys
from os.path import basename
import os
#from PIL.ExifTags import TAGS
from datetime import datetime
extension = ''
#path='/home/pi/Desktop/testrename'
folder_path = "/home/pi/Desktop/testrename/"
l=[]
import PIL.Image
from os import walk
#from path import path
import glob
EXIF_DATETIME = 36867


def renamefinaljpeg() :
    glob.glob ('*/.jpeg') 
    if len(fname) < 20 :
        try :
            old = PIL.Image.open(fname)._getexif()[EXIF_DATETIME]
            old2 = old.split(' ')
            os.rename (fname, "yes" + old2[0]+' '+fname)
            print('fait')
       except :
            pass
            print('pas jpeg')

def renamefinaljpg() :
    glob.glob ('*/.jpg') 
    if len(fname) < 20 :
        try :
             old = PIL.Image.open(fname)._getexif()[EXIF_DATETIME]
             old2 = old.split(' ')
             os.rename (fname, "yes" + old2[0]+' '+fname)
             print('fait')
        except :
            pass
            print('pas jpg')

 rootDir = "/home/pi/Desktop/testrename/"
for dirName, subdirlist, fileList in os.walk(rootDir) :
    for fname in fileList :
        print(fname)
        try  :
             renamefinaljpg() or renamefinaljpeg()
        except :
             pass
             print('passe')

圖像在主目錄中被重命名,但在目錄樹中未重命名(但已被讀取)。謝謝您的幫助。

看起來您已經有很多關於如何在腳本中進行操作的想法。 讓我們使用os.walk因為這可能是最簡單的。 os.walk將遞歸遍歷所有目錄,並為我們提供每個目錄中包含的文件名列表。 要將文件過濾為僅.jpg我們可以使用fnmatch.fnmatch

import fnmatch
import os
import sys

from PIL import Image


folder_path = '/home/pi/Desktop/testrename/old'
# Give special numbers a specific name so it's easier to remember what it
# actually means.
EXIF_DATETIME = 36867


def renamefinal(dir_path, filename):
    try:
        old = Image.open(file_path)._getexif()[EXIF_DATETIME]
        date, time = old.split(' ', maxsplit=1)
        new_filename = date + ' ' + filename
        os.rename(
            # Source file name, including directory and filename
            os.path.join(dir_path, filename),
            # Destination file name, including date
            os.path.join(dir_path, new_filename))
        print(
            'jpg renommé ({}): {} to {}'.format(
                dir_path, filename, new_filename))
    except:
        # Including filename in our output so we know what to check if
        # something goes wrong.
        print('pas jpg ({}): {}'.format(dir_path, filename))


for path, dirs, files in os.walk(folder_path):
    for filename in files:
        if not fnmatch.fnmatch(filename, '*.jpg'):
            # Go to the next file, skipping the rest of the loop for this file.
            continue
        if 30 <= len(filename):
            continue
        renamefinal(path, filename)

還有一些可能會有所幫助:

  • 如果要對腳本使用參數,請查看argparse模塊。
  • 嘗試更具體地捕獲異常,例如,使用except KeyError:而不是except:當您知道EXIF_DATETIME可能不在exif數據中時,也請嘗試將try: ... except: ...僅在可能實際上會失敗。
  • 檢出logging模塊,而不是使用print來顯示有關腳本正在執行的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM