基于Python的一个自动录入表格的小程序


Posted in Python onAugust 05, 2020

## 帮阿雪写的一个小程序
---------------------------------------------------------------------------------------------------
上大学的时候,总是会由很多表格需要同学们去搞,尤其是刚开学的那个时候,显然是很烦躁,
阿雪刚开学的时候,作为班干部,表示有时候刚录表不是很熟悉经常会弄到很晚,甚至还会弄错,
这就让我很是触动,所以想帮她搞一搞,顺便增强一下我们的友谊/hhhhhh
---------------------------------------------------------------------------------------------------

思路:

第一步: 信息还是要填的,以往是同学们发给班委,然后慢慢来搞,但现在不一样的,我要求同学们把他们要填的信息写在记事本里面,内容之间用中文逗号隔开,然后在发给我就行。

第二步: 阿雪只要做的事情是把每个小朋友发的txt文本点击下载就行了,这个显然很简单的事情。

第三步: QQ个人接受的文件一般都会在 (FileRecv)这个文件夹内,每个朋友QQ存放的位置不一样我这里就不详细说明了,我自己存放的位置是:(r'D://qq//qq文档//‘我的qq号'/FileRecv//) 我们把这个路径就姑且叫做qq_path吧!这个路径我们需要事先写入代码内,我这里定义的函数是copy_file()内:具体思想对了就行。

第四步: 整个程序没啥操作难度,根据提示填入指令就行,都是批量处理,函数中我设置了时间间隔,我个人感觉这样能让程序有个停顿感,更友好一点吧。

函数库:

  1. os库: 用于创建文件夹,修改路径,确定路径,文件遍历等操作
  2. csv库: 用于表格的录入time库: 用于程序停顿感
  3. pandas库: 用于csv和xlsx格式之间的转换
  4. shutil库: 用于文件的复制

复制函数:把qq接受的文件全部转移到我们指定的位置便于操作

def copy_file(): # 将qq地址下的文本文件转移到文本存放处待用
 qq_path = r'D://qq//qq文档//qq//FileRecv//' # 文本在qq的位置
 for filename in os.listdir(qq_path):
  txt_path = os.path.join(qq_path, filename) # 拼接这二个地址 进行判断
  if txt_path[-4:] == '.txt':
   if txt_path[-5:-4] in [str(i) for i in range(10)]:
    # 取后缀判断 取学号判断 是否是我们需要的txt
    shutil.copy(txt_path, patht) # 进行复制
    os.remove(txt_path) # 删除在qq地址的文件 避免下次录入 文本过多
   elif txt_path[-6:-4] in [str(i) for i in range(10, 66)]: # 班级人数个人设定
    shutil.copy(txt_path, patht) # 进行复制
    os.remove(txt_path) # 删除在qq地址的文件 避免下次录入 文本过多

 return qq_path

信息的录入:遍历文件夹,逐一读入文本,将得到的信息放入列表

def luru():
 # 把文本以学号保存 文本里面信息用中文逗号分隔
 qq_path = copy_file() # 复制文本到patht
 listss = [] # 录入信息列表
 filenamepath = [] # 文件名称地址
 pathtxt = r'D://测试文件//文本存放处//'
 for filename in os.listdir(pathtxt): # 遍历文本存放处所有的文件
  filenamepath.append(os.path.join(pathtxt, filename))
 print("当前目录{}存放着{}个文件:".format(pathtxt, len(filenamepath)))
 if len(filenamepath) == 0:
  print('请确保文件正确存放在{}处:'.format(qq_path))
 for i in range(len(filenamepath)): # 遍历这个列表 获得绝对地址
  with open(filenamepath[i], "r", encoding='utf-8') as fo:
   for j in fo:
    listss.append(j.split(','))

 return listss

在这里我加了一个小判断,如果录入文本信息为0,那么可能qq接受信息地址没有填对,路径没有很好的确定,导致这个bug

表格的录入:这个就很简单了,利用os库和csv库

def wubiaotou():
 name = input("重命名该表格名称:")
 with open(pathb + name + ".csv", "a+", newline='') as fo:
  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()

删除功能:象征性的写了一下,为了把功能完善一点。

def del_s(path_, fg):
 os.chdir(path_) # 进入path_存放处地址
 biaonumber = len(os.listdir(path_))
 print("当前目录下{}存在{}个文件:".format(path_, biaonumber))
 if biaonumber == 0:
  print("无需删除,当前目录下存在{}个文件".format(biaonumber))
 else:
  delnum = input("请输入要删除的文件名称,并用中文逗号隔开,若输入all则全部删除:").split(",")
  if delnum[0] == 'all': # 当索引第一个为all则删除全部
   for filename in os.listdir(path_): # 遍历这个文件夹
    os.remove(os.path.join(path_, filename))
   time.sleep(0.5)
   print("已经删除{}目录下所有文件!".format(path_))
  else: # 删除输入的表格名称
   for i in range(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/2 18:38
# @author : 沙漏在下雨
# @Software : PyCharm
import os
import csv
import time
import pandas as pd
import shutil

path = r'D://测试文件//'
if not os.path.exists(path): # 创建这个存放文件的大目录
 os.mkdir(path)

patht = path + "文本存放处//"
if not os.path.exists(patht): # 创建这个存放文本的文件夹
 os.mkdir(patht)

pathb = path + "表格存放处//"
if not os.path.exists(pathb): # 创建这个存放表格的文件夹
 os.mkdir(pathb)


def copy_file(): # 将qq地址下的文本文件转移到文本存放处待用
 qq_path = r'D://qq//qq文档//qq//FileRecv//' # 文本在qq的位置
 for filename in os.listdir(qq_path):
  txt_path = os.path.join(qq_path, filename) # 拼接这二个地址 进行判断
  if txt_path[-4:] == '.txt':
   if txt_path[-5:-4] in [str(i) for i in range(10)]:
    # 取后缀判断 取学号判断 是否是我们需要的txt
    shutil.copy(txt_path, patht) # 进行复制
    os.remove(txt_path) # 删除在qq地址的文件 避免下次录入 文本过多
   elif txt_path[-6:-4] in [str(i) for i in range(10, 66)]:
    shutil.copy(txt_path, patht) # 进行复制
    os.remove(txt_path) # 删除在qq地址的文件 避免下次录入 文本过多

 return qq_path


def luru():
 # 把文本以学号保存 文本里面信息用中文逗号分隔
 qq_path = copy_file() # 复制文本到patht
 listss = [] # 录入信息列表
 filenamepath = [] # 文件名称地址
 pathtxt = r'D://测试文件//文本存放处//'
 for filename in os.listdir(pathtxt): # 遍历文本存放处所有的文件
  filenamepath.append(os.path.join(pathtxt, filename))
 print("当前目录{}存放着{}个文件:".format(pathtxt, len(filenamepath)))
 if len(filenamepath) == 0:
  print('请确保文件正确存放在{}处:'.format(qq_path))
 for i in range(len(filenamepath)): # 遍历这个列表 获得绝对地址
  with open(filenamepath[i], "r", encoding='utf-8') as fo:
   for j in fo:
    listss.append(j.split(','))

 return listss


lists = luru()


def youbiaotou():
 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') # 防止转换时候编码错误
 with open(pathnamec, "a+", encoding='utf-8', newline='') as fo:
  fw_csv = csv.writer(fo)
  fw_csv.writerows(lists) # 写入多行
 time.sleep(0.5)
 successful(pathnamec)
 time.sleep(2)
 demo()


def successful(pathname): # 录入成功标识
 print("表格制作成功!".center(38, '-'))
 print("表格位置:{}".format(pathname))
 print("--" * 22)


def wubiaotou():
 name = input("重命名该表格名称:")
 with open(pathb + name + ".csv", "a+", newline='') as fo:
  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()


def helpss(): # 帮助信息
 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))
 with open(path + '帮助信息.txt', "w", encoding='utf-8') as fo:
  fo.write(helptxt)
 if os.path.exists(path + '帮助信息.txt'):
  # newname = '帮助信息.txt'
  # os.rename(path+'helptxt.txt',path+newname)
  os.system(path + '帮助信息.txt')

 demo()


def del_s(path_, fg):
 os.chdir(path_) # 进入path_存放处地址
 biaonumber = len(os.listdir(path_))
 print("当前目录下{}存在{}个文件:".format(path_, biaonumber))
 if biaonumber == 0:
  print("无需删除,当前目录下存在{}个文件".format(biaonumber))
 else:
  delnum = input("请输入要删除的文件名称,并用中文逗号隔开,若输入all则全部删除:").split(",")
  if delnum[0] == 'all': # 当索引第一个为all则删除全部
   for filename in os.listdir(path_): # 遍历这个文件夹
    os.remove(os.path.join(path_, filename))
   time.sleep(0.5)
   print("已经删除{}目录下所有文件!".format(path_))
  else: # 删除输入的表格名称
   for i in range(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()


def demo(): # 目录因素
 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']
 for i in c:
  print('{}'.format(eval(i)))
 control = input("请输入你的数值:")
 if control == '1':
  helpss()
 elif control == '2':
  wubiaotou()
 elif control == '3':
  youbiaotou()
 elif control == '4':
  fg = '.txt'
  del_s(patht, fg)
 elif control == '5':
  fg = '.csv'
  del_s(pathb, fg)
 else:
  print("输入选项错误!")


demo()

到此这篇关于基于Python的一个自动录入表格的小程序的文章就介绍到这了,更多相关基于Python自动录入表格内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python 调用Java实例详解
Jun 02 Python
Python实现生成随机日期字符串的方法示例
Dec 25 Python
Python实现的knn算法示例
Jun 14 Python
python 移动图片到另外一个文件夹的实例
Jan 10 Python
Python面向对象封装操作案例详解 II
Jan 02 Python
如何把外网python虚拟环境迁移到内网
May 18 Python
Python更换pip源方法过程解析
May 19 Python
Python 常用日期处理 -- calendar 与 dateutil 模块的使用
Sep 02 Python
python实现canny边缘检测
Sep 14 Python
python 通过pip freeze、dowload打离线包及自动安装的过程详解(适用于保密的离线环境
Dec 14 Python
python re模块和正则表达式
Mar 24 Python
使用python如何删除同一文件夹下相似的图片
May 07 Python
Python中logging日志记录到文件及自动分割的操作代码
Aug 05 #Python
Python如何读写字节数据
Aug 05 #Python
python中Django文件上传方法详解
Aug 05 #Python
Python限制内存和CPU使用量的方法(Unix系统适用)
Aug 04 #Python
Python如何将将模块分割成多个文件
Aug 04 #Python
Python 保存加载mat格式文件的示例代码
Aug 04 #Python
python中判断文件结束符的具体方法
Aug 04 #Python
You might like
destoon供应信息title调用出公司名称的方法
2014/08/22 PHP
PHP的运行机制与原理(底层)
2015/11/16 PHP
PHP书写格式详解(必看)
2016/05/23 PHP
表单提交验证类
2006/07/14 Javascript
屏蔽鼠标右键、Ctrl+n、shift+F10、F5刷新、退格键 的javascript代码
2007/04/01 Javascript
学习jquery之一
2007/04/27 Javascript
iframe实用操作锦集
2014/04/22 Javascript
jQuery实现的手机发送验证码倒计时效果代码分享
2015/08/24 Javascript
JavaScript事件学习小结(一)事件流
2016/06/09 Javascript
原生js获取iframe中dom元素--父子页面相互获取对方dom元素的方法
2016/08/05 Javascript
微信小程序开发之录音机 音频播放 动画实例 (真机可用)
2016/12/08 Javascript
JS 循环li添加点击事件 (闭包的应用)
2016/12/10 Javascript
AngularJS基于ngInfiniteScroll实现下拉滚动加载的方法
2016/12/14 Javascript
利用VUE框架,实现列表分页功能示例代码
2017/01/12 Javascript
进阶之初探nodeJS
2017/01/24 NodeJs
Cpage.js给组件绑定事件的实现代码
2017/08/31 Javascript
vue cli3.0结合echarts3.0与地图的使用方法示例
2019/03/26 Javascript
使用mixins实现elementUI表单全局验证的解决方法
2019/04/02 Javascript
ES6 Promise对象的含义和基本用法分析
2019/06/14 Javascript
微信小程序文章详情功能完整实例
2020/06/03 Javascript
老生常谈Python之装饰器、迭代器和生成器
2017/07/26 Python
Pycharm设置界面全黑的方法
2018/05/23 Python
python消除序列的重复值并保持顺序不变的实例
2018/11/08 Python
python交互界面的退出方法
2019/02/16 Python
浅谈Python中eval的强大与危害
2019/03/13 Python
详解HTML5新增标签
2017/11/27 HTML / CSS
加拿大时尚潮流大码女装购物网站:Addition Elle
2018/04/02 全球购物
微型企业创业投资计划书
2014/01/10 职场文书
计算机科学系职业生涯规划书
2014/03/08 职场文书
2014年感恩母亲演讲稿
2014/05/27 职场文书
2014年卫生院工作总结
2014/12/03 职场文书
世界卫生日宣传活动总结
2015/02/09 职场文书
小班上学期个人总结
2015/02/12 职场文书
穆斯林的葬礼读书笔记
2015/06/26 职场文书
护士爱岗敬业心得体会
2016/01/25 职场文书
MySQL派生表联表查询实战过程
2022/03/20 MySQL