基于Python的一個自動錄入表格的小程序
## 幫阿雪寫的一個小程序
---------------------------------------------------------------------------------------------------
上大學的時候,總是會由很多表格需要同學們?nèi)ジ?,尤其是剛開學的那個時候,顯然是很煩躁,
阿雪剛開學的時候,作為班干部,表示有時候剛錄表不是很熟悉經(jīng)常會弄到很晚,甚至還會弄錯,
這就讓我很是觸動,所以想幫她搞一搞,順便增強一下我們的友誼/hhhhhh
---------------------------------------------------------------------------------------------------
思路:
第一步: 信息還是要填的,以往是同學們發(fā)給班委,然后慢慢來搞,但現(xiàn)在不一樣的,我要求同學們把他們要填的信息寫在記事本里面,內(nèi)容之間用中文逗號隔開,然后在發(fā)給我就行。
第二步: 阿雪只要做的事情是把每個小朋友發(fā)的txt文本點擊下載就行了,這個顯然很簡單的事情。
第三步: QQ個人接受的文件一般都會在 (FileRecv)這個文件夾內(nèi),每個朋友QQ存放的位置不一樣我這里就不詳細說明了,我自己存放的位置是:(r'D://qq//qq文檔//‘我的qq號'/FileRecv//) 我們把這個路徑就姑且叫做qq_path吧!這個路徑我們需要事先寫入代碼內(nèi),我這里定義的函數(shù)是copy_file()內(nèi):具體思想對了就行。
第四步: 整個程序沒啥操作難度,根據(jù)提示填入指令就行,都是批量處理,函數(shù)中我設置了時間間隔,我個人感覺這樣能讓程序有個停頓感,更友好一點吧。
函數(shù)庫:
- os庫: 用于創(chuàng)建文件夾,修改路徑,確定路徑,文件遍歷等操作
- csv庫: 用于表格的錄入time庫: 用于程序停頓感
- pandas庫: 用于csv和xlsx格式之間的轉(zhuǎn)換
- shutil庫: 用于文件的復制
復制函數(shù):把qq接受的文件全部轉(zhuǎn)移到我們指定的位置便于操作
def copy_file(): # 將qq地址下的文本文件轉(zhuǎn)移到文本存放處待用 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)]: # 班級人數(shù)個人設定 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接受信息地址沒有填對,路徑?jīng)]有很好的確定,導致這個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("已經(jīng)刪除{}目錄下所有文件!".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("已經(jīng)刪除{}目錄下{}個文件!".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): # 創(chuàng)建這個存放文件的大目錄 os.mkdir(path) patht = path + "文本存放處//" if not os.path.exists(patht): # 創(chuàng)建這個存放文本的文件夾 os.mkdir(patht) pathb = path + "表格存放處//" if not os.path.exists(pathb): # 創(chuàng)建這個存放表格的文件夾 os.mkdir(pathb) def copy_file(): # 將qq地址下的文本文件轉(zhuǎn)移到文本存放處待用 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 轉(zhuǎn)換為 csv 格式 便于后續(xù)操作 date_xlsx = pd.read_excel(pathnamey, index_col=0) pathnamec = pathb + names + '.csv' date_xlsx.to_csv(pathnamec, encoding='utf_8_sig') # 防止轉(zhuǎn)換時候編碼錯誤 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該程序主要作用是實現(xiàn)簡單的自動錄入表格功能\n\n' '格式:\t文本信息寫入記事本并用中文逗號將內(nèi)容隔開,命名規(guī)則為學生學號\n\n' '操作:\t只需要事先獲得本臺機器騰訊QQ文件保存地址即(FileRecv地址)' '將其事先寫入代碼內(nèi)\n\n' '備注:\t程序自動將文本打包放入文本存放處(具體位置:{0})進行后續(xù)操作\n\n' '\t若調(diào)用模塊有表頭錄入功能,請事先將待用表格放入({1})處待用\n\n' '\t最后表格將放入表格存放處(具體位置:{2})進行查看\n\n' '\t同時程序功能還實現(xiàn)了批量刪除文本和表格功能供給選擇\n\n' '\t若存在相同名稱表格的不同格式' '則優(yōu)先刪除(.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("已經(jīng)刪除{}目錄下所有文件!".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("已經(jīng)刪除{}目錄下{}個文件!".format(path_, len(delnum))) time.sleep(2) demo() def demo(): # 目錄因素 fix = '-' * 44 title = '文本錄入表格系統(tǒng)'.center(38, '-') helps = '使用說明請輸入數(shù)值 1'.center(40, ' ') fit1 = '模板無表頭請輸數(shù)值 2'.center(40, ' ') fit2 = '模板有表頭請輸數(shù)值 3'.center(40, ' ') del1 = '刪除文本請輸入數(shù)值 4'.center(40, ' ') del2 = '刪除表格請輸入數(shù)值 5'.center(40, ' ') fix = '-' * 44 c = ['fix', 'title', 'helps', 'fit1', 'fit2', 'del1', 'del2', 'fix'] for i in c: print('{}'.format(eval(i))) control = input("請輸入你的數(shù)值:") 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自動錄入表格內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python實現(xiàn)用類讀取文件數(shù)據(jù)并計算矩形面積
今天小編就為大家分享一篇python實現(xiàn)用類讀取文件數(shù)據(jù)并計算矩形面積,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01Python二叉樹的鏡像轉(zhuǎn)換實現(xiàn)方法示例
這篇文章主要介紹了Python二叉樹的鏡像轉(zhuǎn)換實現(xiàn)方法,結(jié)合實例形式分析了二叉樹鏡像轉(zhuǎn)換的原理及Python相關算法實現(xiàn)技巧,需要的朋友可以參考下2019-03-03Python獲取數(shù)據(jù)庫數(shù)據(jù)并保存在excel表格中的方法
今天小編就為大家分享一篇Python獲取數(shù)據(jù)庫數(shù)據(jù)并保存在excel表格中的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06