1. 程式人生 > 程式設計 >基於Python的一個自動錄入表格的小程式

基於Python的一個自動錄入表格的小程式

## 幫阿雪寫的一個小程式
---------------------------------------------------------------------------------------------------
上大學的時候,總是會由很多表格需要同學們去搞,尤其是剛開學的那個時候,顯然是很煩躁,
阿雪剛開學的時候,作為班幹部,表示有時候剛錄表不是很熟悉經常會弄到很晚,甚至還會弄錯,
這就讓我很是觸動,所以想幫她搞一搞,順便增強一下我們的友誼/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,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,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,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","省份"]
    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_,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自動錄入表格內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!