基于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 列表(List)操作方法详解
Mar 11 Python
Python字符串匹配算法KMP实例
Jul 18 Python
python rsa 加密解密
Mar 20 Python
用Pygal绘制直方图代码示例
Dec 07 Python
Python中将变量按行写入txt文本中的方法
Apr 03 Python
Python实现求解一元二次方程的方法示例
Jun 20 Python
利用Python实现原创工具的Logo与Help
Dec 03 Python
python3 打印输出字典中特定的某个key的方法示例
Jul 06 Python
处理python中多线程与多进程中的数据共享问题
Jul 28 Python
Python3 Tkinkter + SQLite实现登录和注册界面
Nov 19 Python
python如何删除文件、目录
Jun 23 Python
OpenCV实现常见的四种图像几何变换
Apr 01 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中去掉字符串首尾空格的方法
2012/05/19 PHP
php ajax实现文件上传进度条
2016/03/29 PHP
php实现图片以base64显示的方法
2016/10/13 PHP
javascript算法学习(直接插入排序)
2011/04/12 Javascript
JavaScript高级程序设计阅读笔记(十六) javascript检测浏览器和操作系统-detect.js
2012/08/14 Javascript
js 距离某一时间点时间是多少实现代码
2013/10/14 Javascript
jQuery实现的一个tab切换效果内部还嵌有切换
2014/08/10 Javascript
node.js中的console用法总结
2014/12/15 Javascript
jQuery应用之jQuery链用法实例
2015/01/19 Javascript
浅谈angular.js中实现双向绑定的方法$watch $digest $apply
2015/10/14 Javascript
JS实现星星评分功能实例代码(两种方法)
2016/06/09 Javascript
JQuery 设置checkbox值二次无效的解决方法
2016/07/22 Javascript
JS获取url参数、主域名的方法实例分析
2016/08/03 Javascript
简单实现Vue的observer和watcher
2016/12/21 Javascript
jquery表单验证插件validation使用方法详解
2017/01/20 Javascript
angularjs实现多张图片上传并预览功能
2017/02/24 Javascript
js/jq仿window文件夹移动/剪切/复制等操作代码
2017/03/08 Javascript
使用mint-ui实现省市区三级联动效果的示例代码
2018/02/09 Javascript
vue中$refs, $emit, $on, $once, $off的使用详解
2019/05/26 Javascript
Python Web框架Tornado运行和部署
2020/10/19 Python
Python爬取网页中的图片(搜狗图片)详解
2017/03/23 Python
Python Tkinter实现简易计算器功能
2018/01/30 Python
对pandas数据判断是否为NaN值的方法详解
2018/11/06 Python
python实现图片上添加图片
2019/11/26 Python
Python3.x+迅雷x 自动下载高分电影的实现方法
2020/01/12 Python
JAVA和C++的区别
2013/10/06 面试题
网站开发实习生的自我评价
2013/12/11 职场文书
幼儿园大班新学期寄语
2014/01/18 职场文书
药学专业学生的自我评价分享
2014/02/06 职场文书
《草虫的村落》教学反思
2014/02/16 职场文书
锦旗标语大全
2014/06/23 职场文书
离职报告格式
2014/11/04 职场文书
违纪学生保证书
2015/02/27 职场文书
导游词之太原天龙山
2020/01/02 职场文书
Nginx反向代理多个服务器的实现方法
2021/03/31 Servers
浅析JavaScript中的变量提升
2022/06/01 Javascript