提取图片DateTimeOriginal元数据并转为MM/DD/YYYY HH:MM格式失败求助
提取图片DateTimeOriginal元数据并格式化失败求助
我尝试提取图片的DateTimeOriginal元数据,将其转为MM/DD/YYYY HH:MM格式,但多次尝试都没成功。以下是我用ExifTool提取拍摄日期的代码:
try: exiftool_process = subprocess.Popen( ['exiftool', '-DateTimeOriginal', '-s3', '-n', file_path], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL, universal_newlines=True ) date_taken = exiftool_process.communicate()[0].strip() if date_taken: metadata_values["Date Taken"] = date_taken except (subprocess.CalledProcessError, FileNotFoundError): pass
我写了三种格式化日期的方法,但都无法正常工作。不过像PIE这类第三方应用却能成功获取并转为MM/DD/YYYY HH:MM格式,求解决办法!
方法1
def format_date_taken(date_taken): try: datetime_obj = datetime.datetime.strptime(date_taken, "%Y:%m:%d %H:%M:%S") return datetime_obj.strftime("%m/%d/%Y %H:%M") except ValueError: try: datetime_obj = datetime.datetime.strptime(date_taken, "%Y:%m:%d %H:%M:%S%z") return datetime_obj.strftime("%m/%d/%Y %H:%M") except ValueError: return date_taken.split(" ")[0]
方法2
def format_date_taken(date_taken): try: if "-" in date_taken: # 处理带时区偏移的日期格式(例如:2023:05:14 15:53:13-04:00) date_str, time_offset = date_taken.split("-") datetime_obj = datetime.datetime.strptime(date_str, "%Y:%m:%d %H:%M:%S") formatted_date = datetime_obj.strftime("%m/%d/%Y") return f"{formatted_date} {time_offset[:6]}" else: # 处理无时区偏移的日期格式(例如:2020:12:31 19:31:49) datetime_obj = datetime.datetime.strptime(date_taken, "%Y:%m:%d %H:%M:%S") return datetime_obj.strftime("%m/%d/%Y %H:%M") except ValueError: return date_taken.split(" ")[0]
方法3
def format_date_taken(date_taken): if "-" in date_taken: # 处理带时区偏移的日期格式(例如:2023:05:14 15:53:13-04:00) date_str = date_taken.split("-")[0] else: # 处理无时区偏移的日期格式(例如:2020:12:31 19:31:49) date_str = date_taken date_parts = date_str.split(":") # 根据位置提取年、月、日、时、分 year = date_parts[0] month = date_parts[1] day = date_parts[2] hour = date_parts[3].split()[0].split()[0] minute = date_parts[3].split()[1] # 返回格式化后的字符串 return f"{month}/{day}/{year} {hour}:{minute}"
内容的提问来源于stack exchange,提问作者VeeyesPlus
相关产品推荐
相关产品推荐

