编写它的目的是为了方便工作
这个工作的大概流程是,客户在网络上将要打印的论文以PDF格式发给我,我会用此程序生成一个编号,生成一个以此编号命名的文件夹,用于保存PDF文件,防止后续出问题无处溯源。
最后的文件目录形式为:…\May-23\编号
开始运行时,会询问使用的机器代码,使用者姓名
输入完基本信息并回车后,会在程序所在目录生成以当前日期命名的文件夹,同时生成用于记录操作的txt文件
# ----------------主程序---------------#
import time
print(
'''
------------------------------
会自动生成以编号命名的文件夹
请将要打印的文件放入相应的文件夹中
从南到北 机器码分别为 1 2 3
------------------------------
'''
)
M_number = input("请输入您使用的机器代码:")
user_n = input("请输入您的名字:")
a = time.gmtime()
b = time.ctime().split()
mon = b[1]
day = b[2]
folder_name = mon+"-"+day
mkdir(folder_name) #创建一级目录
f = open(folder_name+"\\"+"numbers.txt","a+")
f.write("000000{}\n".format(user_n))
f.close()
回车后,程序会生成一段编码,并在当天日期的文件夹中创建以编码为名字的文件夹
编码组成为 : 机器码/小时(24h制)/分钟/区别码
区别码用于防止在极短时间内生成两个编号带来的麻烦,如果前几位重复,则会从0开始累加,防止最后一位重复
for i in range(1000000): #懒得改了,,,
continue_q = input("是否继续?(回车继续/输入n停止/b回退到上一次/j计算器模式):")
if continue_q in ["n", "N"]:
print("程序结束--爱吃鲨鱼的猫")
time.sleep(3)
break
elif continue_q in ["B","b"]:
if pdf_a("\\"+folder_name+"\\"+str(daima)+"\\") == 1: #判断文件页数
continue
elif continue_q in ["J","j"]:
a = input("请输入要计算的公式:")
try:
print(eval(a))
except:
print("请输入正确的运算公式!")
continue
else:
a = time.gmtime()
# number_name_a = M_number + str(a.tm_hour + 8) + str(a.tm_min)
if a.tm_hour >= 16: # 用于纠正时区错误
hour = a.tm_hour - 16
else:
hour = a.tm_hour + 8
number_name_a = "{}{:0>2}{:0>2}".format(M_number,str(hour),str(a.tm_min)) # 产生初级编码,小时+8是因为中国在东八区, 生成编码时,会在此编码后加上区分码
daima = mknumber(number_name_a, folder_name) # 产生高级代码
while True:
if pdf_a("\\"+folder_name+"\\"+str(daima)+"\\") == 1: #判断文件页数
break
numbers.txt中会记录一些信息
记录生成的编号
本是为了后期好统计每个时间段工作的频率,后来为了满足追踪个人绩效的需求,就在此基础上增加了记录使用者的名字,这样以来就可以知道,工作是谁做的了
将PDF文件放入相应编号的文件夹中时,程序会自动读取PDF文件的页数(用PyPDF2库实现),计算总金额
def pdf_a(lujing): #检测文件是否存在,并返回总页数
from PyPDF2 import PdfFileReader
import os
# 检测文件存在
a_1 = os.getcwd() #获取当前路径
lujing1 = a_1+lujing
a0 = os.listdir(lujing1) #获取文件夹内容
a = []
for i in a0: #去除非PDF文件
if i[-3:]=="pdf":
a.append(i)
# a = [i for i in a0 if leixing(a0,"pdf")==1]
# print(a)
if a ==[]:
# print("\r未检测到文件,等待---",end="")
dengdai('未检测到PDF文件,等待')
return 0
else:
print("\r检测到PDF文件",end="")
page = 0
work = []
for i in a:
o_file = open(a_1 + lujing + i, 'rb')
input1 = PdfFileReader(o_file)
print("{}".format(i) + "的页数:" + str(input1.getNumPages()))
page = page + input1.getNumPages()
# input1 = PdfFileReader(open("example.pdf", "rb"))
print("*" * 15)
print("{}个文件,共计:".format(len(a)) + str(page) + "页")
print(str(page) + "-75={},需支付:{:.2f}元".format(page - 75, (page - 75) * 0.2))
print(str(page) + "-65={},需支付:{:.2f}元".format(page - 65, (page - 65) * 0.2))
print(str(page) + "自费,需支付:{:.2f}元".format(page * 0.2))
print("*" * 15)
o_file.close()
return 1
return 0
因为这个工作中涉及两种优惠政策,所以会输出减去75页和减去65页后的金额,为了减少使用时操作程序的次数,我选择让使用者自行判断
程序提供了四种选择
回车和N就不用说了
b是重新判断上一次产生的文件夹中的文件(多个pdf文件有可能被一个一个被拖进文件夹,但程序在第一个pdf文件被拖进去时就会输出结果,为了解决此问题,给予使用者这个选择)
j 就是简单的使用eval()实现的计算器小工具
完整代码:
def mkdir(path): #创建目录
import os # 引入模块
isExists = os.path.exists(path)
if not isExists: # 如果不存在则创建目录
os.makedirs(path) # 创建目录操作函数
return True
else: # 如果目录存在则不创建,并提示目录已存在
return False
def dengdai(a):
import time
for i in range(5):
time.sleep(0.3)
print("\r"+a +"*"*i,end="")
def mknumber(number,folder_name): #生成编码, 并创建文件夹
f = open(folder_name+"\\"+"numbers.txt")
f1 = f.readlines()
daima = " "
print("-------------")
if f1[-1].split()[0][:5]== number:
qbm=str(int(f1[-1].split()[0][5:])+1) #区别码
f.close()
f = open(folder_name + "\\" + "numbers.txt", "a+") # 反复打开文件,是因为不这么做就会有BUG
number = f1[-1].split()[0]
f.write("{}\n".format(int(number[:5]+qbm)))
print("您的代码为{}".format(number[:5]+qbm))
daima = number[:5]+qbm
f.close()
mkdir(folder_name + "\\" +number[:5]+qbm)
else:
f = open(folder_name + "\\" + "numbers.txt","a+")
f.write("{}\n".format(eval(str(number) + "0")))
f.close()
print("您的代码为:{}".format(str(number) + "0"))
daima = str(number) + "0"
mkdir(folder_name + "\\" + str(number) + "0")
f.close()
return daima
# def leixing(a,b): #用于判断列表a中存储的文件名是否为b
# for i in a:
# if i[-3:] != b:
# # print("\r检测到非PDF文件!请只保留PDF文件!",end="")
# dengdai("检测到非PDF文件!请只保留PDF文件!")
# return 0
# else:
# return 1
def pdf_a(lujing): #检测文件是否存在,并返回总页数
from PyPDF2 import PdfFileReader
import os
# 检测文件存在
a_1 = os.getcwd() #获取当前路径
lujing1 = a_1+lujing
a0 = os.listdir(lujing1) #获取文件夹内容
a = []
for i in a0: #去除非PDF文件
if i[-3:]=="pdf":
a.append(i)
# a = [i for i in a0 if leixing(a0,"pdf")==1]
# print(a)
if a ==[]:
# print("\r未检测到文件,等待---",end="")
dengdai('未检测到PDF文件,等待')
return 0
else:
print("\r检测到PDF文件",end="")
page = 0
work = []
for i in a:
o_file = open(a_1 + lujing + i, 'rb')
input1 = PdfFileReader(o_file)
print("{}".format(i) + "的页数:" + str(input1.getNumPages()))
page = page + input1.getNumPages()
# input1 = PdfFileReader(open("example.pdf", "rb"))
print("*" * 15)
print("{}个文件,共计:".format(len(a)) + str(page) + "页")
print(str(page) + "-75={},需支付:{:.2f}元".format(page - 75, (page - 75) * 0.2))
print(str(page) + "-65={},需支付:{:.2f}元".format(page - 65, (page - 65) * 0.2))
print(str(page) + "自费,需支付:{:.2f}元".format(page * 0.2))
print("*" * 15)
o_file.close()
return 1
return 0
# ----------------主程序---------------#
import time
print(
'''
------------------------------
会自动生成以编号命名的文件夹
请将要打印的文件放入相应的文件夹中
从南到北 机器码分别为 1 2 3
------------------------------
'''
)
M_number = input("请输入您使用的机器代码:")
user_n = input("请输入您的名字:")
a = time.gmtime()
b = time.ctime().split()
mon = b[1]
day = b[2]
folder_name = mon+"-"+day
mkdir(folder_name) #创建一级目录
f = open(folder_name+"\\"+"numbers.txt","a+")
f.write("000000{}\n".format(user_n))
f.close()
for i in range(1000000):
continue_q = input("是否继续?(回车继续/输入n停止/b回退到上一次/j计算器模式):")
if continue_q in ["n", "N"]:
print("程序结束--爱吃鲨鱼的猫")
time.sleep(3)
break
elif continue_q in ["B","b"]:
if pdf_a("\\"+folder_name+"\\"+str(daima)+"\\") == 1: #判断文件页数
continue
elif continue_q in ["J","j"]:
a = input("请输入要计算的公式:")
try:
print(eval(a))
except:
print("请输入正确的运算公式!")
continue
else:
a = time.gmtime()
# number_name_a = M_number + str(a.tm_hour + 8) + str(a.tm_min)
if a.tm_hour >= 16: # 用于纠正时区错误
hour = a.tm_hour - 16
else:
hour = a.tm_hour + 8
number_name_a = "{}{:0>2}{:0>2}".format(M_number,str(hour),str(a.tm_min)) # 产生初级编码,小时+8是因为中国在东八区, 生成编码时,会在此编码后加上区分码
daima = mknumber(number_name_a, folder_name) # 产生高级代码
while True:
if pdf_a("\\"+folder_name+"\\"+str(daima)+"\\") == 1: #判断文件页数
break
最后使用了PyInstaller库将py程序打包成exe文件了
需要将PyPDF2库一并打包
我使用有效的代码是:pyinstaller -F 编号v1.1.2.py -p D:\anaconda3\envs\env_name\Lib\site-packages