一、常见库

二、写的两个案例

根据图片目录生成word

from docx import Document# 创建 Document 对象,等价于在电脑上打开一个 Word 文档
from docx.shared import Inches, Cm # Inches=英寸 Cm=厘米 1英尺=2.54厘米
import os
from tkinter import *
import tkinter.messagebox def getImgList(dir):
dirList = []
for single_img in os.listdir(dir):
dirList.append(r'{folder}\{file}'.format(folder=dir, file=single_img))
return dirList def main():
d1 = Ent_Dir1.get()
d2 = Ent_Dir2.get()
wordloc = Ent_WordLoc.get()
if(d1 == ""):
tkinter.messagebox.showerror(title = '提示',message='图片目录1为空')
return
if(d2 == ""):
tkinter.messagebox.showerror(title = '提示',message='图片目录2为空')
return
if(wordloc == ""):
tkinter.messagebox.showerror(title = '提示',message='word位置为空')
return
file_name = d1.split("\\")[-1]+"_"+d2.split("\\")[-1] document = Document()# 在 Word 文档中添加一个标题
# dir1 = r"J:\图片\2022一期"
# dir2 = r"J:\图片\2323一期"
dir1 = r'{file}'.format(file=d1)
dir2 = r'{file}'.format(file=d2)
dirlist1 = getImgList(dir1)
dirlist2 = getImgList(dir2) # print(dirlist1)
for i in range(len(dirlist1)):
a = document.add_paragraph().add_run()
a.add_picture(r'{file}'.format(file=dirlist1[i]), width=Cm(7.5))
a.add_picture(r'{file}'.format(file=dirlist2[i]), width=Cm(7.5))
document.save(r'{wordloc}\{file_name}.docx'.format(wordloc = wordloc,file_name = file_name))
tkinter.messagebox.showinfo(title = '提示',message='word正在持续生成中(可打开word查看),请勿关闭程序') root = Tk()
root.title("根据图片目录生成word")
root.geometry("700x200+500+300")
# 创建一个按钮,按钮名字为”点击“ # 图片目录1
label1 = Label(root,text="图片目录1:")
label1.grid(row=0,column=0)
Ent_Dir1=Entry(root,width=100)
Ent_Dir1.grid(row=0,column=1,ipadx=10) # 图片目录2
label2 = Label(root,text="图片目录2:")
label2.grid(row=1,column=0)
Ent_Dir2=Entry(root,width=100)
Ent_Dir2.grid(row=1,column=1,ipadx=10)
# 生成word位置
label3 = Label(root,text="生成word位置:")
label3.grid(row=2,column=0)
Ent_WordLoc=Entry(root,width=100)
Ent_WordLoc.grid(row=2,column=1,ipadx=10) # 生成
btn_gen = Button(root,text="生成(点击后程序未响应是正常的)",command=main,width=30)
btn_gen.grid(row=3) # 让根窗口保持运行
root.mainloop()

读取图片坐标生成csv

import os
from tkinter import *
import tkinter.messagebox
import exifread
import csv def get_single_gps(img):
with open(img, 'rb') as f:
# 直接读取度分秒格式的经纬度数据
contents = exifread.process_file(f)
try:
longitude = contents["GPS GPSLongitude"].values
has_longitude = True
except:
has_longitude = False
if not has_longitude:
return '', ''
else:
longitude = contents["GPS GPSLongitude"].values
latitude = contents["GPS GPSLatitude"].values
height = contents["GPS GPSAltitude"].values
# 度分秒转换成十进制数据
longitude_f = longitude[0].num / longitude[0].den + (longitude[1].num / longitude[1].den / 60) + (
longitude[2].num / longitude[2].den / 3600)
latitude_f = latitude[0].num / latitude[0].den + (latitude[1].num / latitude[1].den / 60) + (
latitude[2].num / latitude[2].den / 3600)
altitude_f = height[0].num / height[0].den
# 打印验证数据
# print(img,end=",")
# print(longitude_f,end=",")
# print(latitude_f,end=",")
# print(altitude_f)
return longitude_f, latitude_f,altitude_f def get_gps(img_path,postfix):
img_name = []
logitude_list = []
latitude_list = []
altitude_list = []
for single_img in os.listdir(img_path):
if(single_img.split(".")[-1] != postfix):
continue
img_name.append(single_img)
longitude, latitude,altitude = get_single_gps(img_path + '/' + single_img)
logitude_list.append(longitude)
latitude_list.append(latitude)
altitude_list.append(altitude)
return img_name, logitude_list, latitude_list,altitude_list def create_csv(root,file_name):
header = ['img_path', 'Longitude', 'Latitude','Altitude']
with open(root + '/'+file_name+'.csv', 'w', encoding='utf-8-sig', newline="") as f:
writer = csv.writer(f)
writer.writerow(header) def write_csv(root,file_name, result_list):
for i in result_list:
with open(root + '/'+file_name+'.csv', 'a', encoding='utf-8-sig', newline="") as f:
writer = csv.writer(f)
writer.writerow(i) def main():
img = Ent_ImgDir.get()
csv_loc = Ent_CSV.get()
postfix = Ent_postfix.get()
if(img == ""):
tkinter.messagebox.showerror(title = '提示',message='图片目录为空')
return
if(csv_loc == ""):
tkinter.messagebox.showerror(title = '提示',message='csv目录为空')
return
if(postfix == ""):
tkinter.messagebox.showerror(title = '提示',message='图片后缀为空')
return
file_name = img.split("\\")[-1]
print(file_name) root = os.getcwd()
create_csv(csv_loc,file_name)
img_name, logitude_list,latitude_list ,altitude_list= get_gps(img,postfix)
index = range(len(img_name))
row_list = [[img_name[i], logitude_list[i], latitude_list[i],altitude_list[i]] for i in index]
write_csv(csv_loc,file_name, row_list)
tkinter.messagebox.showinfo(title = '提示',message='生成完毕') # if __name__ == '__main__':
# createTk()
# img = 'E:\img\DJI_202309041627_013_kzy3'
# main(img)
root = Tk()
root.title("读取图片坐标生成csv")
root.geometry("700x200+500+300")
# 创建一个按钮,按钮名字为”点击“ # 图片目录
label1 = Label(root,text="图片目录位置:")
label1.grid(row=0,column=0)
Ent_ImgDir=Entry(root,width=100)
Ent_ImgDir.grid(row=0,column=1,ipadx=10) # csv生成位置
label2 = Label(root,text="生成csv目录位置:")
label2.grid(row=1,column=0)
Ent_CSV=Entry(root,width=100)
Ent_CSV.grid(row=1,column=1,ipadx=10)
# csv生成位置
defaultvalue = tkinter.StringVar(value="DNG")
label3 = Label(root,text="图片后缀(注意大小写):")
label3.grid(row=2,column=0)
Ent_postfix=Entry(root,width=100,textvariable=defaultvalue)
Ent_postfix.grid(row=2,column=1,ipadx=10) # 生成
btn_gen = Button(root,text="生成",command=main,width=20)
btn_gen.grid(row=3) # 让根窗口保持运行
root.mainloop()

常见python工具的基本构造-入门的更多相关文章

  1. 常见Python爬虫工具总结

    常见Python爬虫工具总结 前言 以前写爬虫都是用requests包,虽然很好用,不过还是要封装一些header啊什么的,也没有用过无头浏览器,今天偶然接触了一下. 原因是在处理一个错误的时候,用到 ...

  2. python 比较常见的工具方法

    下面是一些工作过程中比较常见的工具方法,但不代表最终答案.希望能对你有所帮助,如果您有更好更多的方法工具,欢迎推荐! 1. 按行读取带json字符串的文件 # -*- coding:utf-8 -*- ...

  3. 初学Python之爬虫的简单入门

    初学Python之爬虫的简单入门 一.什么是爬虫? 1.简单介绍爬虫   爬虫的全称为网络爬虫,简称爬虫,别名有网络机器人,网络蜘蛛等等. 网络爬虫是一种自动获取网页内容的程序,为搜索引擎提供了重要的 ...

  4. 跟我学Python图像处理丨带你入门OpenGL

    摘要:介绍Python和OpenGL的入门知识,包括安装.语法.基本图形绘制等. 本文分享自华为云社区<[Python图像处理] 二十七.OpenGL入门及绘制基本图形(一)>,作者:ea ...

  5. 【Python高级工程师之路】入门+进阶+实战+爬虫+数据分析整套教程

    点击了解更多Python课程>>> 全网最新最全python高级工程师全套视频教程学完月薪平均2万 什么是Python? Python是一门面向对象的编程语言,它相对于其他语言,更加 ...

  6. 常见Python爬虫框架你会几个?

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:三名狂客 正文 注意:如果你Python技术学的不够好,可以点击下方链接 ...

  7. 专为渗透测试人员设计的 Python 工具大合集

    如果你对漏洞挖掘.逆向工程分析或渗透测试感兴趣的话,我第一个要推荐给你的就是Python编程语言.Python不仅语法简单上手容易,而且它还有大量功能强大的库和程序可供我们使用.在这篇文章中,我们会给 ...

  8. Python函数式编程:从入门到走火入魔

    一行代码显示"爱心" >>> print]+(y*-)**-(x**(y*<= ,)]),-,-)]) Python函数式编程:从入门到走火入魔 # @fi ...

  9. C/C++代码覆盖工具gcov与lcov入门

    C/C++代码覆盖工具gcov与lcov入门 gcov是一个可用于C/C++的代码覆盖工具,是gcc的内建工具.下面介绍一下如何利用gcov来收集代码覆盖信息.想要用gcov收集代码覆盖信息,需要在g ...

  10. 《Python黑客编程之极速入门》正式开课

    玄魂 玄魂工作室 今天 之前开启了一个<Python黑客编程>的系列,后来中断了,内容当时设置的比较宽,不太适合入门.现在将其拆分成两个系列<Python黑客编程之极速入门>和 ...

随机推荐

  1. 安装ODOO13

    在CentOS 7服务器下安装和配置Odoo 13 录到服务器: ssh root@your_server_ip1如需检查计算机上安装的CentOS的版本,可以运行以下命令: cat /etc/red ...

  2. Jackson前后端开发模式必备json利器

    前言 json是我们现代互联网程序最常用的交互格式,是否你在工作中会遇到前端说字段不一致需要改的需求,是否遇到过数据库字段名与javaBean的规范不同,是否遇到过json与javaBean相互转换时 ...

  3. 流量劫持 —— GZIP 页面零开销注入 JS

    前言 HTTP 代理给页面注入 JS 是很常见的需求.由于上游服务器返回的页面可能是压缩状态的,因此需解压才能注入,同时为了节省流量,返回下游时还得再压缩.为了注入一小段代码,却将整个页面的流量解压再 ...

  4. 沉思篇-剖析Jetpack的LiveData

    上一篇我们讲到了架构组件中的Lifecycle,由于缺少具体的运用,可能缺少直观的感受,今天我们就用Lifecycle实战一回,看看Lifecycle是怎样运用到LiveData中的. LiveDat ...

  5. 通过模仿学会Python爬虫(一):零基础上手

    好家伙,爬虫来了 爬虫,这玩意,不会怎么办, 诶,先抄一份作业回来 1.别人的爬虫  Python爬虫史上超详细讲解(零基础入门,老年人都看的懂)_ChenBinBini的博客-CSDN博客 # -* ...

  6. TVM-MLC LLM 调优方案

    本文地址:https://www.cnblogs.com/wanger-sjtu/p/17497249.html LLM 等GPT大模型大火以后,TVM社区推出了自己的部署方案,支持Llama,Vic ...

  7. WPF入门教程系列二十九 ——DataGrid使用示例MVVM模式(7)

    WPF入门教程系列目录 WPF入门教程系列二--Application介绍 WPF入门教程系列三--Application介绍(续) WPF入门教程系列四--Dispatcher介绍 WPF入门教程系 ...

  8. yolov5实战之模型剪枝

    续yolov5实战之二维码检测 目录 前沿 为什么要做轻量化 什么是剪枝 稀疏化训练 剪枝 微调 结语 模型下载 前沿   在上一篇yolov5的博客中,我们用yolov5训练了一个二维码检测器,可以 ...

  9. XTTS系列之四:迷迷糊糊的并行度

    项目测试组又反馈一个问题,XTTS执行全量备份速度慢,影响测试进度. 实际算了下,平均速度才150MB/s.. 这个速度在客户生产环境的确是不够看,首先询问是否开了并行,开了多少? 回复是说有开32个 ...

  10. uniapp学习(一)

    [新课uniapp零基础入门到项目打包(微信小程序/H5/vue/安卓apk)全掌握] https://www.bilibili.com/video/BV1mT411K7nW/?p=24&sh ...