基于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中method的参数传递过程
Apr 02 Python
python3音乐播放器简单实现代码
Apr 20 Python
Python实现按中文排序的方法示例
Apr 25 Python
pandas求两个表格不相交的集合方法
Dec 08 Python
Python实现微信自动好友验证,自动回复,发送群聊链接方法
Feb 21 Python
Python3 实现串口两进程同时读写
Jun 12 Python
Django项目中使用JWT的实现代码
Nov 04 Python
wxpython绘制圆角窗体
Nov 18 Python
python numpy库linspace相同间隔采样的实现
Feb 25 Python
jupyter notebook 增加kernel教程
Apr 10 Python
基于Python脚本实现邮件报警功能
May 20 Python
新手学python应该下哪个版本
Jun 11 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
php mysql Errcode: 28 终极解决方法
2009/07/01 PHP
php生成图形验证码几种方法小结
2013/08/15 PHP
PHP的运行机制与原理(底层)
2015/11/16 PHP
利用PHP命令行模式采集股票趋势信息
2016/08/09 PHP
thinkphp Apache配置重启Apache1 restart 出错解决办法
2017/02/15 PHP
php使用GD2绘制几何图形示例
2017/02/15 PHP
利用Dojo和JSON建立无限级AJAX动态加载的功能模块树
2007/03/24 Javascript
利用div+jquery自定义滚动条样式的2种方法
2013/07/18 Javascript
js实现获取焦点后光标在字符串后
2014/09/17 Javascript
Js中使用hasOwnProperty方法检索ajax响应对象的例子
2014/12/08 Javascript
如何用jQuery实现ASP.NET GridView折叠伸展效果
2015/09/26 Javascript
Validform+layer实现漂亮的表单验证特效
2016/01/17 Javascript
详解vue-Resource(与后端数据交互)
2017/01/16 Javascript
AngularJS 验证码60秒倒计时功能的实现
2017/06/05 Javascript
浅谈vue中使用图片懒加载vue-lazyload插件详细指南
2017/10/23 Javascript
JS设计模式之策略模式概念与用法分析
2018/02/05 Javascript
vue--点击当前增加class,其他删除class的方法
2018/09/15 Javascript
手淘flexible.js框架使用和源代码讲解小结
2018/10/15 Javascript
VueJS 取得 URL 参数值的方法
2019/07/19 Javascript
Vue函数式组件的应用实例详解
2019/08/30 Javascript
ES6 class类链式继承,实例化及react super(props)原理详解
2020/02/15 Javascript
详解Django中的ifequal和ifnotequal标签使用
2015/07/16 Python
python scatter散点图用循环分类法加图例
2019/03/19 Python
详解python中docx库的安装过程
2019/11/08 Python
Django用户身份验证完成示例代码
2020/04/03 Python
Pycharm导入anaconda环境的教程图解
2020/07/31 Python
Python3如何实现Win10桌面自动切换
2020/08/11 Python
如何用 Python 处理不平衡数据集
2021/01/04 Python
公开服务承诺制度
2014/03/26 职场文书
绿色环保标语
2014/06/12 职场文书
2014红色之旅心得体会
2014/10/07 职场文书
2015毕业生自我评价范文
2015/03/02 职场文书
离婚财产分割协议书
2015/08/11 职场文书
Python 中数组和数字相乘时的注意事项说明
2021/05/10 Python
PHP实现rar解压读取扩展包小结
2021/06/03 PHP
HTML基础详解(上)
2021/10/16 HTML / CSS