基于Python的一个自动录入表格的小程序
##帮阿雪写的一个小程序
---------------------------------------------------------------------------------------------------
上大学的时候,总是会由很多表格需要同学们去搞,尤其是刚开学的那个时候,显然是很烦躁,
阿雪刚开学的时候,作为班干部,表示有时候刚录表不是很熟悉经常会弄到很晚,甚至还会弄错,
这就让我很是触动,所以想帮她搞一搞,顺便增强一下我们的友谊/hhhhhh
---------------------------------------------------------------------------------------------------
思路:
第一步:信息还是要填的,以往是同学们发给班委,然后慢慢来搞,但现在不一样的,我要求同学们把他们要填的信息写在记事本里面,内容之间用中文逗号隔开,然后在发给我就行。
第二步:阿雪只要做的事情是把每个小朋友发的txt文本点击下载就行了,这个显然很简单的事情。
第三步:QQ个人接受的文件一般都会在(FileRecv)这个文件夹内,每个朋友QQ存放的位置不一样我这里就不详细说明了,我自己存放的位置是:(r'D://qq//qq文档//‘我的qq号'/FileRecv//)我们把这个路径就姑且叫做qq_path吧!这个路径我们需要事先写入代码内,我这里定义的函数是copy_file()内:具体思想对了就行。
第四步:整个程序没啥操作难度,根据提示填入指令就行,都是批量处理,函数中我设置了时间间隔,我个人感觉这样能让程序有个停顿感,更友好一点吧。
函数库:
- os库:用于创建文件夹,修改路径,确定路径,文件遍历等操作
- csv库:用于表格的录入time库:用于程序停顿感
- pandas库:用于csv和xlsx格式之间的转换
- shutil库:用于文件的复制
复制函数:把qq接受的文件全部转移到我们指定的位置便于操作
defcopy_file():#将qq地址下的文本文件转移到文本存放处待用 qq_path=r'D://qq//qq文档//qq//FileRecv//'#文本在qq的位置 forfilenameinos.listdir(qq_path): txt_path=os.path.join(qq_path,filename)#拼接这二个地址进行判断 iftxt_path[-4:]=='.txt': iftxt_path[-5:-4]in[str(i)foriinrange(10)]: #取后缀判断取学号判断是否是我们需要的txt shutil.copy(txt_path,patht)#进行复制 os.remove(txt_path)#删除在qq地址的文件避免下次录入文本过多 eliftxt_path[-6:-4]in[str(i)foriinrange(10,66)]:#班级人数个人设定 shutil.copy(txt_path,patht)#进行复制 os.remove(txt_path)#删除在qq地址的文件避免下次录入文本过多 returnqq_path
信息的录入:遍历文件夹,逐一读入文本,将得到的信息放入列表
defluru(): #把文本以学号保存文本里面信息用中文逗号分隔 qq_path=copy_file()#复制文本到patht listss=[]#录入信息列表 filenamepath=[]#文件名称地址 pathtxt=r'D://测试文件//文本存放处//' forfilenameinos.listdir(pathtxt):#遍历文本存放处所有的文件 filenamepath.append(os.path.join(pathtxt,filename)) print("当前目录{}存放着{}个文件:".format(pathtxt,len(filenamepath))) iflen(filenamepath)==0: print('请确保文件正确存放在{}处:'.format(qq_path)) foriinrange(len(filenamepath)):#遍历这个列表获得绝对地址 withopen(filenamepath[i],"r",encoding='utf-8')asfo: forjinfo: listss.append(j.split(',')) returnlistss
在这里我加了一个小判断,如果录入文本信息为0,那么可能qq接受信息地址没有填对,路径没有很好的确定,导致这个bug
表格的录入:这个就很简单了,利用os库和csv库
defwubiaotou(): name=input("重命名该表格名称:") withopen(pathb+name+".csv","a+",newline='')asfo: num=input("请输入表头,并用中文逗号分隔开:") headers=num.split(",") #headers=["国籍","民族","省份"] fr_csv=csv.writer(fo) fr_csv.writerow(headers) fr_csv.writerows(lists) pathnamew=pathb+name+'.csv' time.sleep(0.5) successful(pathnamew) time.sleep(2) demo()
删除功能:象征性的写了一下,为了把功能完善一点。
defdel_s(path_,fg): os.chdir(path_)#进入path_存放处地址 biaonumber=len(os.listdir(path_)) print("当前目录下{}存在{}个文件:".format(path_,biaonumber)) ifbiaonumber==0: print("无需删除,当前目录下存在{}个文件".format(biaonumber)) else: delnum=input("请输入要删除的文件名称,并用中文逗号隔开,若输入all则全部删除:").split(",") ifdelnum[0]=='all':#当索引第一个为all则删除全部 forfilenameinos.listdir(path_):#遍历这个文件夹 os.remove(os.path.join(path_,filename)) time.sleep(0.5) print("已经删除{}目录下所有文件!".format(path_)) else:#删除输入的表格名称 foriinrange(len(delnum)): fn=str(delnum[i])+fg os.remove(os.path.join(path_+fn)) time.sleep(0.5) print("已经删除{}目录下{}个文件!".format(path_,len(delnum))) time.sleep(2) demo()
整个代码不是很难理解,仔细看看应该都能明白,相信你们,奥力给,干了兄弟们!
全部代码如下:
#-*-coding:utf-8-*- #@Time:2020/3/218:38 #@author:沙漏在下雨 #@Software:PyCharm importos importcsv importtime importpandasaspd importshutil path=r'D://测试文件//' ifnotos.path.exists(path):#创建这个存放文件的大目录 os.mkdir(path) patht=path+"文本存放处//" ifnotos.path.exists(patht):#创建这个存放文本的文件夹 os.mkdir(patht) pathb=path+"表格存放处//" ifnotos.path.exists(pathb):#创建这个存放表格的文件夹 os.mkdir(pathb) defcopy_file():#将qq地址下的文本文件转移到文本存放处待用 qq_path=r'D://qq//qq文档//qq//FileRecv//'#文本在qq的位置 forfilenameinos.listdir(qq_path): txt_path=os.path.join(qq_path,filename)#拼接这二个地址进行判断 iftxt_path[-4:]=='.txt': iftxt_path[-5:-4]in[str(i)foriinrange(10)]: #取后缀判断取学号判断是否是我们需要的txt shutil.copy(txt_path,patht)#进行复制 os.remove(txt_path)#删除在qq地址的文件避免下次录入文本过多 eliftxt_path[-6:-4]in[str(i)foriinrange(10,66)]: shutil.copy(txt_path,patht)#进行复制 os.remove(txt_path)#删除在qq地址的文件避免下次录入文本过多 returnqq_path defluru(): #把文本以学号保存文本里面信息用中文逗号分隔 qq_path=copy_file()#复制文本到patht listss=[]#录入信息列表 filenamepath=[]#文件名称地址 pathtxt=r'D://测试文件//文本存放处//' forfilenameinos.listdir(pathtxt):#遍历文本存放处所有的文件 filenamepath.append(os.path.join(pathtxt,filename)) print("当前目录{}存放着{}个文件:".format(pathtxt,len(filenamepath))) iflen(filenamepath)==0: print('请确保文件正确存放在{}处:'.format(qq_path)) foriinrange(len(filenamepath)):#遍历这个列表获得绝对地址 withopen(filenamepath[i],"r",encoding='utf-8')asfo: forjinfo: listss.append(j.split(',')) returnlistss lists=luru() defyoubiaotou(): print("请将带有表头的表格事先放入{}处待用:".format(pathb)) names=input("请输入该表格名称:") pathnamey=pathb+names+".xlsx"#获得原xlsx的地址 #使用pandas讲xlsx转换为csv格式便于后续操作 date_xlsx=pd.read_excel(pathnamey,index_col=0) pathnamec=pathb+names+'.csv' date_xlsx.to_csv(pathnamec,encoding='utf_8_sig')#防止转换时候编码错误 withopen(pathnamec,"a+",encoding='utf-8',newline='')asfo: fw_csv=csv.writer(fo) fw_csv.writerows(lists)#写入多行 time.sleep(0.5) successful(pathnamec) time.sleep(2) demo() defsuccessful(pathname):#录入成功标识 print("表格制作成功!".center(38,'-')) print("表格位置:{}".format(pathname)) print("--"*22) defwubiaotou(): name=input("重命名该表格名称:") withopen(pathb+name+".csv","a+",newline='')asfo: num=input("请输入表头,并用中文逗号分隔开:") headers=num.split(",") #headers=["国籍","民族","省份"] fr_csv=csv.writer(fo) fr_csv.writerow(headers) fr_csv.writerows(lists) pathnamew=pathb+name+'.csv' time.sleep(0.5) successful(pathnamew) time.sleep(2) demo() defhelpss():#帮助信息 helptxt=('说明:\t该程序主要作用是实现简单的自动录入表格功能\n\n' '格式:\t文本信息写入记事本并用中文逗号将内容隔开,命名规则为学生学号\n\n' '操作:\t只需要事先获得本台机器腾讯QQ文件保存地址即(FileRecv地址)' '将其事先写入代码内\n\n' '备注:\t程序自动将文本打包放入文本存放处(具体位置:{0})进行后续操作\n\n' '\t若调用模块有表头录入功能,请事先将待用表格放入({1})处待用\n\n' '\t最后表格将放入表格存放处(具体位置:{2})进行查看\n\n' '\t同时程序功能还实现了批量删除文本和表格功能供给选择\n\n' '\t若存在相同名称表格的不同格式' '则优先删除(.csv)格式的表格\n\n'.format(patht,pathb,pathb)) withopen(path+'帮助信息.txt',"w",encoding='utf-8')asfo: fo.write(helptxt) ifos.path.exists(path+'帮助信息.txt'): #newname='帮助信息.txt' #os.rename(path+'helptxt.txt',path+newname) os.system(path+'帮助信息.txt') demo() defdel_s(path_,fg): os.chdir(path_)#进入path_存放处地址 biaonumber=len(os.listdir(path_)) print("当前目录下{}存在{}个文件:".format(path_,biaonumber)) ifbiaonumber==0: print("无需删除,当前目录下存在{}个文件".format(biaonumber)) else: delnum=input("请输入要删除的文件名称,并用中文逗号隔开,若输入all则全部删除:").split(",") ifdelnum[0]=='all':#当索引第一个为all则删除全部 forfilenameinos.listdir(path_):#遍历这个文件夹 os.remove(os.path.join(path_,filename)) time.sleep(0.5) print("已经删除{}目录下所有文件!".format(path_)) else:#删除输入的表格名称 foriinrange(len(delnum)): fn=str(delnum[i])+fg os.remove(os.path.join(path_+fn)) time.sleep(0.5) print("已经删除{}目录下{}个文件!".format(path_,len(delnum))) time.sleep(2) demo() defdemo():#目录因素 fix='-'*44 title='文本录入表格系统'.center(38,'-') helps='使用说明请输入数值1'.center(40,'') fit1='模板无表头请输数值2'.center(40,'') fit2='模板有表头请输数值3'.center(40,'') del1='删除文本请输入数值4'.center(40,'') del2='删除表格请输入数值5'.center(40,'') fix='-'*44 c=['fix','title','helps','fit1','fit2','del1','del2','fix'] foriinc: print('{}'.format(eval(i))) control=input("请输入你的数值:") ifcontrol=='1': helpss() elifcontrol=='2': wubiaotou() elifcontrol=='3': youbiaotou() elifcontrol=='4': fg='.txt' del_s(patht,fg) elifcontrol=='5': fg='.csv' del_s(pathb,fg) else: print("输入选项错误!") demo()
到此这篇关于基于Python的一个自动录入表格的小程序的文章就介绍到这了,更多相关基于Python自动录入表格内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!