用python对照片按地理位置进行整理分类
时间: 2023-06-26 16:04:19 浏览: 99
要对照片按地理位置进行整理分类,首先需要获取每张照片的经纬度信息。可以使用 Python 的 exifread 模块来读取照片的 EXIF 数据,其中包括了照片的经纬度信息。
以下是代码示例,假设所有照片都存放在一个文件夹中:
```python
import os
import exifread
# 输入照片所在目录的路径
photos_dir = input("请输入照片所在目录的路径:")
# 遍历目录下的所有文件
for filename in os.listdir(photos_dir):
if not filename.endswith('.jpg'):
continue
# 打开照片文件
with open(os.path.join(photos_dir, filename), 'rb') as f:
# 读取照片的EXIF信息
tags = exifread.process_file(f)
# 获取照片的经纬度信息
lat_ref = tags.get('GPS GPSLatitudeRef', None)
lat = tags.get('GPS GPSLatitude', None)
lon_ref = tags.get('GPS GPSLongitudeRef', None)
lon = tags.get('GPS GPSLongitude', None)
# 如果存在经纬度信息,则输出照片的位置信息
if lat and lon and lat_ref and lon_ref:
lat_value = float(lat.values[0].num) / float(lat.values[0].den)
lon_value = float(lon.values[0].num) / float(lon.values[0].den)
if lat_ref.values[0] == 'S':
lat_value = -lat_value
if lon_ref.values[0] == 'W':
lon_value = -lon_value
print('{}: ({}, {})'.format(filename, lat_value, lon_value))
```
这段代码会遍历照片所在目录下的所有 JPG 格式的文件,读取每张照片的 EXIF 信息,并提取出经纬度信息。然后,如果该照片包含经纬度信息,就会输出该照片的位置信息。
接下来,可以根据照片的位置信息,将它们分别存放在不同的文件夹中。例如,可以创建一个名为“按地点分类”的文件夹,然后再根据照片的经纬度信息,创建不同的子文件夹,将照片存放在不同的子文件夹中。
以下是示例代码:
```python
import os
import exifread
import shutil
# 输入照片所在目录的路径
photos_dir = input("请输入照片所在目录的路径:")
# 创建按地点分类的文件夹
location_dir = os.path.join(photos_dir, "按地点分类")
if not os.path.exists(location_dir):
os.mkdir(location_dir)
# 遍历目录下的所有文件
for filename in os.listdir(photos_dir):
if not filename.endswith('.jpg'):
continue
# 打开照片文件
with open(os.path.join(photos_dir, filename), 'rb') as f:
# 读取照片的EXIF信息
tags = exifread.process_file(f)
# 获取照片的经纬度信息
lat_ref = tags.get('GPS GPSLatitudeRef', None)
lat = tags.get('GPS GPSLatitude', None)
lon_ref = tags.get('GPS GPSLongitudeRef', None)
lon = tags.get('GPS GPSLongitude', None)
# 如果存在经纬度信息,则将照片存放在对应的子文件夹中
if lat and lon and lat_ref and lon_ref:
lat_value = float(lat.values[0].num) / float(lat.values[0].den)
lon_value = float(lon.values[0].num) / float(lon.values[0].den)
if lat_ref.values[0] == 'S':
lat_value = -lat_value
if lon_ref.values[0] == 'W':
lon_value = -lon_value
lat_dir = os.path.join(location_dir, '{}°{}'.format(abs(int(lat_value)), int((abs(lat_value) - int(abs(lat_value))) * 60)))
lon_dir = os.path.join(lat_dir, '{}°{}'.format(abs(int(lon_value)), int((abs(lon_value) - int(abs(lon_value))) * 60)))
if not os.path.exists(lon_dir):
os.makedirs(lon_dir)
shutil.copy(os.path.join(photos_dir, filename), lon_dir)
```
这段代码会创建一个名为“按地点分类”的文件夹,然后遍历照片所在目录下的所有 JPG 格式的文件。对于每张照片,如果它包含经纬度信息,就会根据经纬度信息创建对应的子文件夹,并将该照片复制到对应的子文件夹中。
需要注意的是,这段代码只能处理包含了经纬度信息的照片。如果某张照片没有经纬度信息,它将会被忽略。