按照文件名最后数字进行排序
Posted 卓晴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了按照文件名最后数字进行排序相关的知识,希望对你有一定的参考价值。
简 介: 修改了ppt2csdn中存在的文件名称排序错误。通过提取文件名称最后面的数字字符串来作为文件排序的关键字,可以消除PPT文件在转存成JPEG文件时对应的数码编码方式。
关键词
: PPT,JPEG,Python,排序
§01 文件排序
一、PPT,PDF转存JPEG
通常情况下,需要将PDF,PPT文件形成图片导入CSDN作为文档存储。
1、PDF,PPT转存数字格式不同
但是PDF,PPT在转存成JPEG文件的时候,文件名称命名不统一。对于PDF文件,它的文件后缀数字是等长的数字,比如对100页之内的文件, 最后的数字则是以“_0x”为标注。
▲ 图1.1.1 PDF文件存储为JPEG时文件名称
而PPT文件在转存成JPEG文件的时候,它的文件后缀中的数字是不定长的,而是从1 开始自然增长。
▲ 图1.1.2 PPT文件转存成JPEG文件后缀数字编码方式
2、带来的问题
在使用ppt2csdn将目录中的文件发送到CSDN的Markdown编辑器的时候,排序对于PDF文件是正确的。但是对于PPT的数字编码方式出现问题。
(1)排序Python代码
def picdir2csdn(dirstr, width, sideflag):
ispicfile = lambda s : 1 if s.split('.')[-1].upper() == 'JPG' or \\
s.split('.')[-1].upper() == 'BMP' or \\
s.split('.')[-1].upper() == 'PNG' else 0
pptimages = [s for s in os.listdir(dirstr) if ispicfile(s) == 1]
s = sorted(pptimages, reverse=False)
printf('Total Page Number : %d'%len(s))
for f in s:
fname = os.path.join(dirstr, f)
printf(fname)
# pasteimg2csdn(fname, width, sideflag)
# time.sleep(.5)
(2)输出结果
下面是排序输出结果,可以看到如果按照这个顺序,将JPEG导入CSDN的Markdown编辑器,会出现顺序错位。
Total Page Number : 35
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片1.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片10.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片11.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片12.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片13.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片14.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片15.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片16.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片17.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片18.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片19.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片2.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片20.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片21.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片22.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片23.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片24.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片25.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片26.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片27.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片28.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片29.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片3.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片30.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片31.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片32.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片33.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片34.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片35.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片4.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片5.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片6.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片7.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片8.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片9.JPG
二、修改排序程序
下面需要对于ppt2csdn中的文件排序进行修改。
1、修改后的代码
在对文件名进行排序前,先提取文件名中最后的数字字符串。然后在根据该字符串的大小进行文件名称的排序。
#------------------------------------------------------------
def filename2num(fs):
for i in range(len(fs)):
if not fs[-(i+1):].isdigit():
return int(fs[-i:])
return int(fs)
#------------------------------------------------------------
def picdir2csdn(dirstr, width, sideflag):
ispicfile = lambda s : 1 if s.split('.')[-1].upper() == 'JPG' or \\
s.split('.')[-1].upper() == 'BMP' or \\
s.split('.')[-1].upper() == 'PNG' else 0
pptimages = [s for s in os.listdir(dirstr) if ispicfile(s) == 1]
# s = sorted(pptimages, reverse=False)
pagenum = [filename2num(ss.split('.')[0]) for ss in pptimages]
pagesort = sorted(zip(pptimages, pagenum), reverse=False, key=lambda x:x[1])
s = [p[0] for p in pagesort]
printf('Total Page Number : %d'%len(s))
for f in s:
fname = os.path.join(dirstr, f)
printf(fname)
pasteimg2csdn(fname, width, sideflag)
time.sleep(.5)
2、修改后输出结果
下面是修改后文件打印排序。
Total Page Number : 35
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片1.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片2.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片3.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片4.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片5.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片6.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片7.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片8.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片9.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片10.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片11.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片12.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片13.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片14.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片15.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片16.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片17.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片18.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片19.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片20.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片21.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片22.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片23.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片24.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片25.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片26.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片27.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片28.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片29.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片30.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片31.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片32.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片33.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片34.JPG
D:\\Temp\\JPEG\\人工智能助力全国大学智能车竞赛\\幻灯片35.JPG
※ 总 结 ※
修改了ppt2csdn中存在的文件名称排序错误。通过提取文件名称最后面的数字字符串来作为文件排序的关键字,可以消除PPT文件在转存成JPEG文件时对应的数码编码方式。
● 相关图表链接:
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# PPT2CSDN.PY -- by Dr. ZhuoQing 2021-01-04
#
# Usage: ppt2csdn w# s# #2
# w800 : Set the width =800
# s0,s1 : No side, has side
# #2 : filename01
#
# Note: Copy the PPT file or related image directory into clipboard,
# then use ppt2csdn to paste all the image into csdn.
#
# Install: pip install python-pptx-interface
#
#============================================================
from head import *
from PIL import Image, ImageDraw
from io import BytesIO
import win32clipboard
from pptx_tools import utils
#------------------------------------------------------------
num0len = 1 # For file tail number 01 length
#------------------------------------------------------------
def extractfile(fname, imagedir=r'd:\\temp\\pptpng'):
if os.path.isdir(imagedir):
for f in os.listdir(imagedir):
os.remove(os.path.join(imagedir, f))
pptfile = fname
png_folder = imagedir
utils.save_pptx_as_png(png_folder, pptfile, overwrite_folder=True)
#------------------------------------------------------------
csdn_window = '写文章-CSDN博客'
#------------------------------------------------------------
def send_to_clipboard(clip_type, data):
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardData(clip_type, data)
win32clipboard.CloseClipboard()
#------------------------------------------------------------
def pasteimg2csdn(fname, width=800, sideflag=1):
image = Image.open(fname)
if sideflag > 0:
draw = ImageDraw.Draw(image)
draw.rectangle((0, 0, image.size[0]-1, image.size[1]-1), width=sideflag, outline='#c0c0c0')
output = BytesIO()
image.convert('RGB').save(output, 'BMP')
data = output.getvalue()[14:]
output.close()
send_to_clipboard(win32clipboard.CF_DIB, data)
#--------------------------------------------------------
printf("\\a")
tspsendwindowkey(csdn_window, 'v', control=1,noreturn=1)
time.sleep(2)
#--------------------------------------------------------
for i in range(20):
time.sleep(1)
readdata = tspread()
if readdata[2] == 1: break
if readdata[7] != 0: break
if readdata[8] != 0: exit()
if readdata[9] != 0: exit()
tspsendwindowkey(csdn_window, 'c', control=1,noreturn=1)
if clipboard.paste().fin以上是关于按照文件名最后数字进行排序的主要内容,如果未能解决你的问题,请参考以下文章