小工具汇总

最近工作上总是需要重复处理一些事情,比如整理文件(夹),修改文件属性之类的,所以写了点小工具,随手记录一下,以便日后查找

按道理来说.bat脚本更方便使用,而且在windows端不需要安装任何东西,但无奈不擅长,哈哈

#获取当前路径下所有文件

包括子文件夹、(孙)文件夹,...

1
2
3
4
5
6
7
8
9
10
def all_files_path(root_dir):
filepaths = []
for root,dirs,files in os.walk(root_dir):
for file in files:
file_path = os.path.join(root,file)
filepaths.append(file_path)
for dir in dirs:
dir_path = os.path.join(root,dir)
all_files_path(dir_path)
return filepaths

以上函数的返回值是一个包含有root_dir路径下所有文件完整路径的一个列表

以此函数为基础,可以做很多很多事情了,比如删除所有的.un~文件,那么就直接对字符串结尾判断就可以了,然后利用os.unlink删除就好了。再结合正则表达式,功能也就更强大了。

#删除照片的EXIF信息

照片的EXIF信息可能包含有很多敏感信息,例如拍摄地点,拍摄设备以及更进一步的拍摄参数等等。所以再上传图片或者发送图片给其他人的时候,最好还是先把EXIF信息清理一下

以下就用.jpg文件来做个示例

1
2
3
4
5
6
7
from pyexiv2 import Image
import json

img = Image(f"{imgFileName}")
exif = img.read_exif()
with open(f"{jsonFileName}", 'w') as f:
json.dump(exif, f, indent=2)

{
"Exif.Image.Make": "Canon",
"Exif.Image.Model": "Canon EOS 800D",
"Exif.Image.Orientation": "1",
"Exif.Image.XResolution": "72/1",
"Exif.Image.YResolution": "72/1",
"Exif.Image.ResolutionUnit": "2",
"Exif.Image.DateTime": "2018:09:12 15:15:50",
...
}

也就是说,EXIF信息是以一种类似于字典的方式存储在图片文件中的,那么把所有的值改为空值或者随便什么没有意义的东西就可以了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from pyexiv2 import Image

def all_files_path(root_dir): # still remember this function, do you?
...

if __name__ == "__main__":
all_files_path(os.getcwd())
for filepath in filepaths:
if filepath.endswith(".JPG") or filepath.endswith(".jpg"):
img = Image(filepath)
exif = img.read_exif()
for i in exif:
exif[i] = ""
img.modify_exif(exif)

现在再读取图片的EXIF信息的话,结果会显示成这样:

{
"Exif.Image.Make": "",
"Exif.Image.Model": "",
"Exif.Image.Orientation": "",
"Exif.Image.XResolution": "",
"Exif.Image.YResolution": "",
"Exif.Image.ResolutionUnit": "",
"Exif.Image.DateTime": "",
...
}

#命令行启动特定程序打开文件

有时使用命令行启动程序打开文件有很多好处(省略)

此脚本包含对特定路径下所有文件的重命名,以及程序操作,结合获取当前路径下所有文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if __name__ == "__main__":
path = input("folder name: (folder containing all files)\n")
ULTRA = '"{application executable file path}"'
l = all_files_path(path)
ext1 = ["docx", "doc"]
ext2 = ["txt", "html"]
for i in l:
print(i)
for j in range(len(ext1)):
if i.endswith(ext1[j]):
os.rename(i, f"""{".".join(i.split(".")[:-1])}.{ext2[j]}""")
targetName = f"{'.'.join(i.split('.')[:-1])}.{ext2[j]}"
os.system(f'{ULTRA} {targetName}')
elif i.endswith(ext2[j]):
os.rename(i, f"""{".".join(i.split(".")[:-1])}.{ext1[j]}""")

#结语

接着整理接着添加嘿嘿

До свидания, Харбин Xpath学习笔记
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×