基于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实现监控windows服务并自动启动服务示例
Apr 17 Python
Python中的变量和作用域详解
Jul 13 Python
Python中文件的读取和写入操作
Apr 27 Python
基于python的图片修复程序(实现水印去除)
Jun 04 Python
Python实现的简单排列组合算法示例
Jul 04 Python
解决Python3.5+OpenCV3.2读取图像的问题
Dec 05 Python
使用python将excel数据导入数据库过程详解
Aug 27 Python
Pytorch evaluation每次运行结果不同的解决
Jan 02 Python
matlab 计算灰度图像的一阶矩,二阶矩,三阶矩实例
Apr 22 Python
Python爬虫代理池搭建的方法步骤
Sep 28 Python
python+flask编写一个简单的登录接口
Nov 13 Python
OpenCV 图像梯度的实现方法
Jul 25 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程序的方法
2009/03/09 PHP
PHP如何抛出异常处理错误
2011/03/02 PHP
php导出excel格式数据问题
2014/03/11 PHP
PHP实现把文本中的URL转换为链接的auolink()函数分享
2014/07/29 PHP
PHP使用header()输出图片缓存实例
2014/12/09 PHP
MAC下通过改apache配置文件切换php多版本的方法
2017/04/26 PHP
thinkphp框架page类与bootstrap分页(美化)
2017/06/25 PHP
PHP排序算法之希尔排序(Shell Sort)实例分析
2018/04/20 PHP
php识别翻转iphone拍摄的颠倒图片
2018/05/17 PHP
tp5.1 框架数据库高级查询技巧实例总结
2020/05/25 PHP
向当前style sheet中插入一个新的style实现方法
2013/04/01 Javascript
ZeroClipboard插件实现多浏览器复制功能(支持firefox、chrome、ie6)
2014/08/30 Javascript
jquery delay()介绍及使用指南
2014/09/02 Javascript
Javascript 数组排序详解
2014/10/22 Javascript
jquery实现自适应banner焦点图
2017/02/16 Javascript
利用JS如何计算字符串所占字节数示例代码
2017/09/13 Javascript
Vim快速合并行及vim 将文件所有行合并到一行
2017/11/27 Javascript
jQuery实现鼠标响应式透明度渐变动画效果示例
2018/02/13 jQuery
JavaScript模拟实现自由落体效果
2018/08/28 Javascript
彻底弄懂 JavaScript 执行机制
2018/10/23 Javascript
vue中的ref和$refs的使用
2018/11/22 Javascript
发布Angular应用至生产环境的方法
2018/12/10 Javascript
详解Puppeteer前端自动化测试实践
2019/02/21 Javascript
「中高级前端面试」JavaScript手写代码无敌秘籍(推荐)
2019/04/08 Javascript
vue实现鼠标经过动画
2019/10/16 Javascript
如何在python中使用selenium的示例
2017/12/26 Python
详解python函数传参是传值还是传引用
2018/01/16 Python
IE支持HTML5的解决方法
2009/10/20 HTML / CSS
智利最大的网上商店:Linio智利
2016/11/24 全球购物
Java的基础面试题附答案
2016/01/10 面试题
市场营销个人求职信范文
2014/02/02 职场文书
冬季安全检查方案
2014/05/23 职场文书
监察局领导班子四风问题整改措施思想汇报
2014/10/05 职场文书
师德先进个人材料
2014/12/20 职场文书
JPA如何使用entityManager执行SQL并指定返回类型
2021/06/15 Java/Android
Java设计模式中的命令模式
2022/04/28 Java/Android