基于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中的递归函数
Apr 27 Python
Python操作MySQL模拟银行转账
Mar 12 Python
浅谈pandas中DataFrame关于显示值省略的解决方法
Apr 08 Python
TensorFlow 滑动平均的示例代码
Jun 19 Python
python3 property装饰器实现原理与用法示例
May 15 Python
Python中查看变量的类型内存地址所占字节的大小
Jun 26 Python
flask的orm框架SQLAlchemy查询实现解析
Dec 12 Python
Python hashlib常见摘要算法详解
Jan 13 Python
python3安装OCR识别库tesserocr过程图解
Apr 02 Python
matplotlib教程——强大的python作图工具库
Oct 15 Python
Python的collections模块真的很好用
Mar 01 Python
Python作用域和名称空间的详细介绍
Apr 13 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为SHOPEX增加日志功能代码
2010/07/02 PHP
关于js和php对url编码的处理方法
2014/03/04 PHP
Yii2中YiiBase自动加载类、引用文件方法分析(autoload)
2016/07/25 PHP
TP5框架实现自定义分页样式的方法示例
2020/04/05 PHP
解决JQeury显示内容没有边距内容紧挨着浏览器边线
2013/12/20 Javascript
纯javascript版日历控件
2016/11/24 Javascript
jquery实现转盘抽奖功能
2017/01/06 Javascript
Linux使用Node.js建立访问静态网页的服务实例详解
2017/03/21 Javascript
通过GASP让vue实现动态效果实例代码详解
2019/11/24 Javascript
JS实现轮播图效果
2020/01/11 Javascript
Vue实现随机验证码功能
2020/12/29 Vue.js
使用Python实现一个简单的项目监控
2015/03/31 Python
pyqt5简介及安装方法介绍
2018/01/31 Python
Python实现抢购IPhone手机
2018/02/07 Python
virtualenv 指定 python 解释器的版本方法
2018/10/25 Python
python实现生成字符串大小写字母和数字的各种组合
2019/01/01 Python
从0开始的Python学习016异常
2019/04/08 Python
python读csv文件时指定行为表头或无表头的方法
2019/06/26 Python
numpy数组做图片拼接的实现(concatenate、vstack、hstack)
2019/11/08 Python
Python使用指定字符长度切分数据示例
2019/12/05 Python
解决python打开https出现certificate verify failed的问题
2020/09/03 Python
python绕过图片滑动验证码实现爬取PTA所有题目功能 附源码
2021/01/06 Python
只要五步 就可以用HTML5/CSS3快速制作便签贴特效(图)
2012/06/04 HTML / CSS
GAP欧盟网上商店:GAP EU
2016/09/13 全球购物
super()与this()的区别
2016/01/17 面试题
大学生职业生涯规划方案
2014/01/03 职场文书
《藏戏》教学反思
2014/02/11 职场文书
创业者迈进成功第一步:如何写创业计划书?
2014/03/22 职场文书
文明之星事迹材料
2014/05/09 职场文书
人事任命书范文
2014/06/04 职场文书
学生上课看漫画的检讨书
2014/09/26 职场文书
离婚协议书怎么写2014
2014/09/30 职场文书
2015年清明节网上祭英烈留言寄语
2015/03/04 职场文书
导游词之台湾安平古堡
2019/12/25 职场文书
CSS3 Tab动画实例之背景切换动态效果
2021/08/23 HTML / CSS
试用1103暨1103、1101同门大比武 [ DAIWEI ]
2022/04/05 无线电