Python實(shí)現(xiàn)將字典(列表按列)存入csv文件
主要用了pandas的to_csv()的方法來寫入csv。
先將字典轉(zhuǎn)換成 DataFrame類型數(shù)據(jù),然后使用DataFrame.to_csv()即可完成存儲(chǔ)。
1、將字典存入csv文件
import pandas as pd dic1 = {'學(xué)號(hào)': [6812, 6952, 6905], '姓名': ['一', '二', '三'], '排名': [1, 6, 9]} df = pd.DataFrame(dic1, index=range(0, 3)) df.to_csv('last.csv', index=False, encoding='gbk')
結(jié)果:
2、列表按列存入csv文件
主要思想:
把需要按列存入的列表當(dāng)成字典的值存入,鍵寫“名稱”即可;逗號(hào)間隔列表。
例如:
想把4個(gè)列表“按列”寫入csv文件,整合好寫入字典,再將字典轉(zhuǎn)換成DataFrame類型數(shù)據(jù)。
week1 = ['一', '二', '三', '四', '五', '六', '七'] weekSpend = [50, 40, 30, 60, 45, 55, 67] day1 = ['m', 't', 'w', 'tu', 'f', 's', 'su'] daySpend = [10, 20, 30, 40, 10, 20, 22] DF = {'weekName': week1, 'weekSpend': weekSpend, 'dayName': day1, 'daySpend': daySpend} trydf = pd.DataFrame(DF) trydf.to_csv('df1.csv', index=False, encoding='gbk', mode='a')
按列追加運(yùn)行結(jié)果結(jié)果:
3、反例(沒轉(zhuǎn)字典就只有一列)
如果把每個(gè)列表僅轉(zhuǎn)換成DataFrame類型數(shù)據(jù),追加寫入csv,會(huì)發(fā)現(xiàn)寫入都是在整列后面寫入
如下演示:
week1 = ['一', '二', '三', '四', '五', '六', '七'] weekSpend = [50, 40, 30, 60, 45, 55, 67] day1 = ['m', 't', 'w', 'tu', 'f', 's', 'su'] daySpend = [10, 20, 30, 40, 10, 20, 22] try2df1 = pd.DataFrame(week1) try2df2 = pd.DataFrame(weekSpend) try2df3 = pd.DataFrame(day1) try2df4 = pd.DataFrame(daySpend) try2df1.to_csv('df2.csv', index=False, encoding='gbk', mode='a') try2df2.to_csv('df2.csv', index=False, encoding='gbk', mode='a') try2df3.to_csv('df2.csv', index=False, encoding='gbk', mode='a') try2df4.to_csv('df2.csv', index=False, encoding='gbk', mode='a')
運(yùn)行結(jié)果:
(提一嘴,發(fā)現(xiàn)這里一上面有個(gè)headers為0,不想要,可以加入?yún)?shù):(header=None)
即:
pd1.to_csv('save.csv', encoding='gbk', index=False, header=None) # 里面有中文就用gbk
實(shí)戰(zhàn)需求
需求1
將磁力文本存入csv表格中,便于統(tǒng)計(jì)下載情況和備注
我的文本格式是:
S-003
magnet:?xt=urn:btih:12345678BAG
S-123 小王
magnet:?xt=urn:btih:123456AGGAS小王
magnet:?xt=urn:btih:123456AGGAS解釋一下:S-123是序號(hào),而小王是視頻名稱.
然后我希望csv第一列是編號(hào),第二列是名稱,第三列才是磁力。
實(shí)現(xiàn)源碼
import re import pandas as pd with open('李連jie.txt', 'r', encoding='utf-8') as f: data_ = f.readlines() save_list = [] def to_scv_(): print(data_) temp_tup = [] for i in data_: find_name_1 = re.findall('([a-zA-Z]+-\d+)\n', i) # 匹配編號(hào)的行(只有編號(hào)) if len(find_name_1): print(find_name_1) temp_tup.append(find_name_1[0]) temp_tup.append('') # 無名 else: find_name_2 = re.findall('([a-zA-Z]+-\d+) (.*?)\n', i) # 匹配名稱的行(匹配中文)(只有名稱) if len(find_name_2): print(find_name_2) temp_tup.append(find_name_2[0][0]) temp_tup.append(find_name_2[0][1]) # 順序不能反,因?yàn)?中也有中文,還有編號(hào),所以2查詢在前 else: find_name_3 = re.findall('([\u4e00-\u9fa5]+)\n', i) # 匹配編號(hào) 名稱的行(編號(hào),名稱都有) if len(find_name_3): print(find_name_3) temp_tup.append('') # 無編號(hào) temp_tup.append(find_name_3[0]) magnet_ = re.findall('(magnet:.*?)\n', i) # 匹配磁力 if len(magnet_): temp_tup.append(magnet_[0]) save_list.append(temp_tup) temp_tup = [] # 只有在追加完名稱,現(xiàn)在加完磁力才是一個(gè)完整的list,這時(shí)才清空 print(save_list) for i in save_list: print(i) save_dic = ({'編號(hào)': row[0], '名稱': row[1], '磁力鏈接': row[2]} for row in save_list) pd1 = pd.DataFrame(save_dic) pd1.to_csv('mysave.csv', encoding='gbk', index=False, header=None) to_scv_()
下面?zhèn)渫洠?/strong>
需求2
將兩個(gè)分開的csv文件讀取后,合并在一起
之前的需求:(績點(diǎn)文件)優(yōu)化后的代碼:
import pandas as pd data = pd.read_csv('newdata.csv', encoding='utf-8') # 包含成績等數(shù)據(jù),但不包含班級(jí)信息 stu_class = pd.read_csv('班級(jí).csv', encoding='utf-8') # 僅包含班級(jí)和姓名的數(shù)據(jù) # 使用 merge 函數(shù)根據(jù)姓名進(jìn)行合并 merged_data = pd.merge(stu_class, data, on='姓名') # 選擇需要的列并重命名 result = merged_data[['姓名', '班級(jí)', '體測成績', '學(xué)年平均學(xué)分績點(diǎn)', '綜合測評(píng)總分排名', '綜合測評(píng)總分(百分制、精確到小數(shù)點(diǎn)后4位)', '學(xué)業(yè)成績考核排名']] result.columns = ['姓名', '班級(jí)', '體測', '績點(diǎn)', '績點(diǎn)排名', '綜測得分', '綜測排名'] # 將結(jié)果保存為 CSV 文件 result.to_csv('最終文件.csv', index=False, encoding='gbk')
(績點(diǎn)文件) 之前的代碼
import pandas as pd data = pd.read_csv('newdata.csv', encoding='utf-8') # 含有成績等的數(shù)據(jù),但是沒有班級(jí)信息 stu_class = pd.read_csv('班級(jí).csv', encoding='utf-8') # 僅含有班級(jí)和姓名的數(shù)據(jù) dic = {} score_index = 0 # 包含學(xué)生成績的數(shù)據(jù)索引 class_index = -1 # 包含學(xué)生班級(jí)的數(shù)據(jù)索引 for name in stu_class['姓名']: class_index += 1 for stu_score in data['姓名']: if score_index == len(data): score_index = 0 break elif name != stu_score: score_index += 1 continue elif name == stu_score: # 這里需要特別注意:班級(jí)跟成績不是同一個(gè)index dic[name] = (stu_class['班級(jí)'][class_index][6:7], data['體測成績'][score_index], data['學(xué)年平均學(xué)分績點(diǎn)'][score_index], data['綜合測評(píng)總分排名'][score_index], data['綜合測評(píng)總分(百分制、精確到小數(shù)點(diǎn)后4位)'][score_index], data['學(xué)業(yè)成績考核排名'][score_index]) score_index = 0 break else: pass ''' 說明:存儲(chǔ)到csv文件中時(shí),必須是數(shù)據(jù)框類型的數(shù)據(jù)才有to_csv的函數(shù)!且columns對應(yīng)的數(shù)據(jù)必須是一個(gè)列表 ''' last_class = list() last_pe = list() last_gpa = list() last_rank = list() last_score = list() last_gpa_rank = list() for name in stu_class['姓名']: # 要追加而不是覆蓋 try: last_class.append(dic[name][0]) last_pe.append(dic[name][1]) last_gpa.append(dic[name][2]) last_rank.append(dic[name][3]) last_score.append(dic[name][4]) last_gpa_rank.append(dic[name][5]) except KeyError: # 部分名字沒有對應(yīng)的數(shù)據(jù),那么try、except后,無數(shù)據(jù)的名字就會(huì)跳過了 pass last = pd.DataFrame() last['姓名'] = list(dic.keys()) last['班級(jí)'] = last_class last['體測'] = last_pe last['績點(diǎn)'] = last_gpa last['績點(diǎn)排名'] = last_gpa_rank last['綜測得分'] = last_score last['綜測排名'] = last_rank result = pd.DataFrame(last, columns=['姓名', '班級(jí)', '體測', '績點(diǎn)', '績點(diǎn)排名', '綜測得分', '綜測排名']) result.to_csv('最終文件.csv', index=False, encoding='gbk')
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Django項(xiàng)目中添加ldap登陸認(rèn)證功能的實(shí)現(xiàn)
這篇文章主要介紹了Django項(xiàng)目中添加ldap登陸認(rèn)證功能的實(shí)現(xiàn),詳細(xì)介紹了django-auth-ldap的使用方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-04-04使用grpc實(shí)現(xiàn)golang后端和python服務(wù)間通信
gRPC是Google 開發(fā)的高性能、開源的遠(yuǎn)程過程調(diào)用(RPC)框架,本文主要為大家詳細(xì)介紹了如何使用grpc實(shí)現(xiàn)golang后端和python服務(wù)間通信,感興趣的可以了解下2024-03-03Django框架實(shí)現(xiàn)在線考試系統(tǒng)的示例代碼
這篇文章主要介紹了Django框架實(shí)現(xiàn)在線考試系統(tǒng)的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11在Python 中同一個(gè)類兩個(gè)函數(shù)間變量的調(diào)用方法
今天小編就為大家分享一篇在Python 中同一個(gè)類兩個(gè)函數(shù)間變量的調(diào)用方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01Keras設(shè)定GPU使用內(nèi)存大小方式(Tensorflow backend)
這篇文章主要介紹了Keras設(shè)定GPU使用內(nèi)存大小方式(Tensorflow backend),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05python實(shí)現(xiàn)將json多行數(shù)據(jù)傳入到mysql中使用
這篇文章主要介紹了python實(shí)現(xiàn)將json多行數(shù)據(jù)傳入到mysql中使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12python使用magic模塊進(jìn)行文件類型識(shí)別方法
今天小編就為大家分享一篇python使用magic模塊進(jìn)行文件類型識(shí)別方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12Python最火、R極具潛力 2017機(jī)器學(xué)習(xí)調(diào)查報(bào)告
Python最火,R極具潛力,分享2017機(jī)器學(xué)習(xí)調(diào)查報(bào)告,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12Python基于unittest實(shí)現(xiàn)測試用例執(zhí)行
這篇文章主要介紹了Python基于unittest實(shí)現(xiàn)測試用例執(zhí)行,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11