日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python文本分类汇总_用Python解决海量数据的分类汇总一键化办公的神器!

發(fā)布時(shí)間:2024/1/18 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python文本分类汇总_用Python解决海量数据的分类汇总一键化办公的神器! 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

現(xiàn)實(shí)的創(chuàng)作來(lái)源于生活的靈感!

項(xiàng)目引入

昨天突然發(fā)現(xiàn)有一個(gè)比較頭疼的問(wèn)題,有一份數(shù)據(jù)是某一個(gè)學(xué)校的寢室數(shù)據(jù),有不同的維度的分類(lèi),總的數(shù)據(jù)大概有4000數(shù)據(jù),需要進(jìn)行分類(lèi),然后按照不同分類(lèi)維度進(jìn)行表格制作,最后生成8個(gè)文件夾,每個(gè)文件夾里面有24個(gè)表格,這個(gè)就是我們這一個(gè)程序的最終實(shí)現(xiàn)功能。如果我們用Excel篩選需要點(diǎn)很多次,而且需要幾個(gè)人的配合工作,這樣就比較的費(fèi)力,那么作為數(shù)據(jù)分析的Python神器,可不可以解決這個(gè)問(wèn)題了,答案是當(dāng)然可以!

項(xiàng)目思路

1.首先對(duì)這個(gè)大量的數(shù)據(jù)進(jìn)行導(dǎo)入,用CSV這個(gè)庫(kù),然后按照Python的對(duì)象進(jìn)行寫(xiě)入和解析,最后存儲(chǔ)在pycharm運(yùn)行內(nèi)存空間,方便我們下一步操作。

2.導(dǎo)入之后我們就需要分類(lèi)了,這個(gè)時(shí)候需要我們寫(xiě)一個(gè)算法了,我把它叫做“字典迭代算法”當(dāng)然是我自己命名的,這個(gè)里面涉及到很多的坑,最后我們需要把這個(gè)功能封裝起來(lái)。

3.數(shù)據(jù)保存也就是,CSV文件的寫(xiě)入數(shù)據(jù),最后利用Python的內(nèi)置模塊OS進(jìn)行文件夾的分類(lèi)創(chuàng)建,最后實(shí)現(xiàn)保存數(shù)據(jù),這個(gè)時(shí)候我們還要解決CSV文件的中文亂碼問(wèn)題。

難點(diǎn)

1.解析數(shù)據(jù)之后如何分割數(shù)據(jù),進(jìn)行保存

2.寫(xiě)入文件的時(shí)候如何解決亂碼問(wèn)題

3.怎樣去結(jié)構(gòu)化我們的代碼程序

代碼介紹

大概的思路就是這樣,下面我們來(lái)具體看看這個(gè)程序的功能實(shí)現(xiàn)的功能步驟

解析數(shù)據(jù)

# 1.解析CSV海量數(shù)據(jù),用字典保存在內(nèi)存空間

def csv_data():

global dormitory_data

import csv

dormitory_data = []

with open(r"寢室數(shù)據(jù).csv", encoding='utf-8-sig') as file:#將你的CSV文件和該程序文件放在一個(gè)文件夾下面

f_csv = csv.reader(file)#讀取文件里面的每一行數(shù)據(jù),轉(zhuǎn)換為列表賦值給新的變量

header = next(f_csv)#利用迭代的方法,直接取出表頭行(標(biāo)題行),更新f_csv的數(shù)據(jù),去除了標(biāo)題行

for row in f_csv:

data = {}

for index in range(7):

data[header[index]] = row[index]

dormitory_data.append(data)

這里我們對(duì)一份Excel的數(shù)據(jù),修改它的后綴名,變成CSV文件的后綴名即可,然后我們就對(duì)這個(gè)數(shù)據(jù)進(jìn)行導(dǎo)入和解析了。

這個(gè)解析過(guò)程和我們之前的一篇文章《用Python寫(xiě)一個(gè)成績(jī)計(jì)算系統(tǒng)》的有異曲同工之妙。主要要理解對(duì)表頭行的提取很數(shù)據(jù)迭代解析,最后存儲(chǔ)在一個(gè)列表里面。注意這里一般都是需要聲明全局變量的。

效果執(zhí)行

分割數(shù)據(jù)

# 分割數(shù)據(jù),按照數(shù)據(jù)的特點(diǎn)

def csv_sort():

global dicts

dicts=[];i = 0

dormitory_datas = dormitory_data.copy()#字典迭代刪除迭代數(shù)據(jù)是一個(gè)坑,需要我們時(shí)刻更新數(shù)據(jù)庫(kù)值

dormitory_datass= dormitory_data.copy()

for x in dormitory_datass:

b = []

for sort in dormitory_datass:

a_1 = sort["宿舍編號(hào)"]

b.append(a_1)

dicts.append(x)

dormitory_data.remove(x)

dormitory_datass=dormitory_data.copy()

if b[i][:3] != b[i+1][:3]:

break

這里不要小看這個(gè)幾行代碼,這個(gè)里面的算法是需要進(jìn)行反復(fù)的測(cè)試,才實(shí)行的,里面有幾個(gè)坑,真的是有點(diǎn)頭疼,還好最后解決了。

1.首先我們要按照一個(gè)算法去分割數(shù)據(jù),我們?yōu)g覽數(shù)據(jù)之后發(fā)現(xiàn),每一個(gè)組團(tuán)的1-4棟寢室數(shù)據(jù)都是有相關(guān)聯(lián)的,1樓到2樓的寢室編號(hào)我們按照前三位的數(shù)據(jù)節(jié)點(diǎn),進(jìn)行索引判斷,這樣去迭代每一個(gè)數(shù)據(jù),然后進(jìn)行比較,最后如果不同的話,我們就發(fā)現(xiàn)那么肯定是不同的樓層了,需要我們進(jìn)行分割數(shù)據(jù)了。

2.但是我們發(fā)現(xiàn)我們跳出循環(huán)之后,也就是迭代完1樓的寢室數(shù)據(jù)之后,我們驚奇的字典的數(shù)據(jù)雖然是變化了,但是唯獨(dú)也發(fā)生了變化,這個(gè)就是第一個(gè)坑,因?yàn)榱斜淼膭h除有一個(gè)特點(diǎn),它是利用迭代索引進(jìn)行刪除的,這個(gè)在我之前的計(jì)算機(jī)二級(jí)Python程序語(yǔ)言設(shè)計(jì)-疑難雜癥知識(shí)點(diǎn)匯總,提到了這個(gè)解決辦法。我最后利用字典的復(fù)制存儲(chǔ),不斷的去更新和彌補(bǔ)這個(gè)數(shù)據(jù)字典,bug才解決,這個(gè)時(shí)候真的需要靜下心來(lái)慢慢思索。

3.利用字典迭代算法,判斷什么時(shí)候需要分割數(shù)據(jù),最后封裝這個(gè)函數(shù)功能。

保存數(shù)據(jù)

#保存數(shù)據(jù),按照不同的分類(lèi)

def keep_data():

import csv

import os

import codecs

for w in range(65,73):

W=chr(w)

path = '%s棟寢室'%W? ? ? # 創(chuàng)建總的文件夾

if not os.path.exists(path):

os.mkdir(path)

os.chdir(path)

else:

os.chdir(path)

a = []

dict = dormitory_data[0]

for headers in dict.keys():? # 把字典的鍵取出來(lái),注意不要使用sorted不然會(huì)導(dǎo)致鍵的順序改變

a.append(headers)

header = a? # 把列名給提取出來(lái),用列表形式呈現(xiàn)

for k in range(1,5):

K=k

for p in range(1,7):

P=p

csv_sort()

with open('%s組%d棟%d樓.csv'%(W,K,P ),'a', newline='', encoding='utf-8-sig') as f:

writer = csv.DictWriter(f, fieldnames=header,)? # 提前預(yù)覽列名,當(dāng)下面代碼寫(xiě)入數(shù)據(jù)時(shí),會(huì)將其一一對(duì)應(yīng)。

writer.writeheader()? # 寫(xiě)入列名

writer.writerows(dicts)? # 寫(xiě)入數(shù)據(jù)

print("{}組{}棟寢室{}樓數(shù)據(jù)已經(jīng)寫(xiě)入成功!!!! ! !".format(W,K,P))

這個(gè)功能同樣有幾個(gè)坑,首先我們需要對(duì)數(shù)據(jù)設(shè)計(jì)好迭代for循環(huán)保存,并且利用OS模塊繼續(xù)自動(dòng)的創(chuàng)建文件夾,最后對(duì)其數(shù)據(jù)進(jìn)行命名,方便我們查看還有就是我們的CSV文件里面的編碼是utf-8模式,但是Excel里面的編碼不同,這個(gè)就會(huì)造成我們的中文數(shù)據(jù)形式的亂碼問(wèn)題。

所以我們就去用了這個(gè)辦法來(lái)解決了

encoding='utf-8-sig'

下面我們來(lái)看看整體操作的演示效果

代碼升級(jí)版

1.我們還可以參考一些辦法,對(duì)這個(gè)表格數(shù)據(jù)進(jìn)行自動(dòng)制作,添加頭部文件信息,當(dāng)然我這里就不做演示了,你們可以自己去尋找不同的解決方法。

2.我們還可以對(duì)數(shù)據(jù)表格進(jìn)行網(wǎng)格線繪制,使其我們的表格更加美觀,比如字體居中等

3.編寫(xiě)一個(gè)自動(dòng)打印的程序,鏈接到我們的電腦打印機(jī),一鍵化打印這些數(shù)據(jù),極大地提高了我們的效率。

這些功能讀者可以自己去實(shí)現(xiàn),我這里就不做說(shuō)明了,畢竟代碼的涉及和項(xiàng)目不容易,哈哈哈哈!

自動(dòng)化辦公,一鍵化處理,本來(lái)就是Python的強(qiáng)項(xiàng),我們可以利用它的功能來(lái)解決我們學(xué)習(xí)生活的難題,最后我想致敬那些每天為了數(shù)據(jù)整理,瘋狂的點(diǎn)擊Excel的工作人員,畢竟這個(gè)東西頭大,難搞,枯燥,乏味

最后我想要說(shuō)的是雖然設(shè)計(jì)項(xiàng)目程序比較的頭疼,但是它可以移植,并且不斷的升級(jí),最后別人用1個(gè)小時(shí),你只需要3秒鐘運(yùn)行查看即可!

程序源碼

# -*- coding :? utf-8 -*-

# @Time? ? ? :? 2020/9/15 13:26

# @author? ? :? 王小王

# @Software? :? PyCharm

# @File? ? ? :? 寢室數(shù)據(jù)分類(lèi).py-1.0版本

# @CSDN? ? ? :? https://blog.csdn.net/weixin_47723732

# 1.解析CSV海量數(shù)據(jù),用字典保存在內(nèi)存空間

def csv_data():

global dormitory_data

import csv

dormitory_data = []

with open(r"寢室數(shù)據(jù).csv", encoding='utf-8-sig') as file:#將你的CSV文件和該程序文件放在一個(gè)文件夾下面

f_csv = csv.reader(file)#讀取文件里面的每一行數(shù)據(jù),轉(zhuǎn)換為列表賦值給新的變量

header = next(f_csv)#利用迭代的方法,直接取出表頭行(標(biāo)題行),更新f_csv的數(shù)據(jù),去除了標(biāo)題行

for row in f_csv:

data = {}

for index in range(7):

data[header[index]] = row[index]

dormitory_data.append(data)

# 分割數(shù)據(jù),按照數(shù)據(jù)的特點(diǎn)

def csv_sort():

global dicts

dicts=[];i = 0

dormitory_datas = dormitory_data.copy()#字典迭代刪除迭代數(shù)據(jù)是一個(gè)坑,需要我們時(shí)刻更新數(shù)據(jù)庫(kù)值

dormitory_datass= dormitory_data.copy()

for x in dormitory_datass:

b = []

for sort in dormitory_datass:

a_1 = sort["宿舍編號(hào)"]

b.append(a_1)

dicts.append(x)

dormitory_data.remove(x)

dormitory_datass=dormitory_data.copy()

if b[i][:3] != b[i+1][:3]:

break

#保存數(shù)據(jù),按照不同的分類(lèi)

def keep_data():

import csv

import os

import codecs

for w in range(65,73):

W=chr(w)

path = '%s棟寢室'%W? ? ? # 創(chuàng)建總的文件夾

if not os.path.exists(path):

os.mkdir(path)

os.chdir(path)

else:

os.chdir(path)

a = []

dict = dormitory_data[0]

for headers in dict.keys():? # 把字典的鍵取出來(lái),注意不要使用sorted不然會(huì)導(dǎo)致鍵的順序改變

a.append(headers)

header = a? # 把列名給提取出來(lái),用列表形式呈現(xiàn)

for k in range(1,5):

K=k

for p in range(1,7):

P=p

csv_sort()

with open('%s組%d棟%d樓.csv'%(W,K,P ),'a', newline='', encoding='utf-8-sig') as f:

writer = csv.DictWriter(f, fieldnames=header,)? # 提前預(yù)覽列名,當(dāng)下面代碼寫(xiě)入數(shù)據(jù)時(shí),會(huì)將其一一對(duì)應(yīng)。

writer.writeheader()? # 寫(xiě)入列名

writer.writerows(dicts)? # 寫(xiě)入數(shù)據(jù)

print("{}組{}棟寢室{}樓數(shù)據(jù)已經(jīng)寫(xiě)入成功!!!! ! !".format(W,K,P))

def main():

csv_data()

keep_data()

if __name__ == '__main__':

main()

學(xué)到了嗎?學(xué)到了就點(diǎn)贊轉(zhuǎn)發(fā)呀!

此文轉(zhuǎn)載文,著作權(quán)歸作者所有,如有侵權(quán)聯(lián)系小編刪除!

總結(jié)

以上是生活随笔為你收集整理的python文本分类汇总_用Python解决海量数据的分类汇总一键化办公的神器!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。