Python實(shí)現(xiàn)將字典(列表按列)存入csv文件
主要用了pandas的to_csv()的方法來(lái)寫(xiě)入csv。
先將字典轉(zhuǎn)換成 DataFrame類(lèi)型數(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)成字典的值存入,鍵寫(xiě)“名稱(chēng)”即可;逗號(hào)間隔列表。
例如:
想把4個(gè)列表“按列”寫(xiě)入csv文件,整合好寫(xiě)入字典,再將字典轉(zhuǎn)換成DataFrame類(lèi)型數(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、反例(沒(méi)轉(zhuǎn)字典就只有一列)
如果把每個(gè)列表僅轉(zhuǎn)換成DataFrame類(lèi)型數(shù)據(jù),追加寫(xiě)入csv,會(huì)發(fā)現(xiàn)寫(xiě)入都是在整列后面寫(xiě)入
如下演示:
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),而小王是視頻名稱(chēng).
然后我希望csv第一列是編號(hào),第二列是名稱(chēng),第三列才是磁力。
實(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('') # 無(wú)名
else:
find_name_2 = re.findall('([a-zA-Z]+-\d+) (.*?)\n', i) # 匹配名稱(chēng)的行(匹配中文)(只有名稱(chēng))
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查詢(xún)?cè)谇?
else:
find_name_3 = re.findall('([\u4e00-\u9fa5]+)\n', i) # 匹配編號(hào) 名稱(chēng)的行(編號(hào),名稱(chēng)都有)
if len(find_name_3):
print(find_name_3)
temp_tup.append('') # 無(wú)編號(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 = [] # 只有在追加完名稱(chēng),現(xiàn)在加完磁力才是一個(gè)完整的list,這時(shí)才清空
print(save_list)
for i in save_list:
print(i)
save_dic = ({'編號(hào)': row[0], '名稱(chēng)': 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è)分開(kāi)的csv文件讀取后,合并在一起
之前的需求:(績(jī)點(diǎn)文件)優(yōu)化后的代碼:
import pandas as pd
data = pd.read_csv('newdata.csv', encoding='utf-8') # 包含成績(jī)等數(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í)', '體測(cè)成績(jī)', '學(xué)年平均學(xué)分績(jī)點(diǎn)', '綜合測(cè)評(píng)總分排名', '綜合測(cè)評(píng)總分(百分制、精確到小數(shù)點(diǎn)后4位)', '學(xué)業(yè)成績(jī)考核排名']]
result.columns = ['姓名', '班級(jí)', '體測(cè)', '績(jī)點(diǎn)', '績(jī)點(diǎn)排名', '綜測(cè)得分', '綜測(cè)排名']
# 將結(jié)果保存為 CSV 文件
result.to_csv('最終文件.csv', index=False, encoding='gbk')(績(jī)點(diǎn)文件) 之前的代碼
import pandas as pd
data = pd.read_csv('newdata.csv', encoding='utf-8') # 含有成績(jī)等的數(shù)據(jù),但是沒(méi)有班級(jí)信息
stu_class = pd.read_csv('班級(jí).csv', encoding='utf-8') # 僅含有班級(jí)和姓名的數(shù)據(jù)
dic = {}
score_index = 0 # 包含學(xué)生成績(jī)的數(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í)跟成績(jī)不是同一個(gè)index
dic[name] = (stu_class['班級(jí)'][class_index][6:7], data['體測(cè)成績(jī)'][score_index], data['學(xué)年平均學(xué)分績(jī)點(diǎn)'][score_index], data['綜合測(cè)評(píng)總分排名'][score_index], data['綜合測(cè)評(píng)總分(百分制、精確到小數(shù)點(diǎn)后4位)'][score_index], data['學(xué)業(yè)成績(jī)考核排名'][score_index])
score_index = 0
break
else:
pass
'''
說(shuō)明:存儲(chǔ)到csv文件中時(shí),必須是數(shù)據(jù)框類(lèi)型的數(shù)據(jù)才有to_csv的函數(shù)!且columns對(duì)應(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: # 部分名字沒(méi)有對(duì)應(yīng)的數(shù)據(jù),那么try、except后,無(wú)數(shù)據(jù)的名字就會(huì)跳過(guò)了
pass
last = pd.DataFrame()
last['姓名'] = list(dic.keys())
last['班級(jí)'] = last_class
last['體測(cè)'] = last_pe
last['績(jī)點(diǎn)'] = last_gpa
last['績(jī)點(diǎn)排名'] = last_gpa_rank
last['綜測(cè)得分'] = last_score
last['綜測(cè)排名'] = last_rank
result = pd.DataFrame(last, columns=['姓名', '班級(jí)', '體測(cè)', '績(jī)點(diǎn)', '績(jī)點(diǎn)排名', '綜測(cè)得分', '綜測(cè)排名'])
result.to_csv('最終文件.csv', index=False, encoding='gbk')總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
用Python將動(dòng)態(tài)GIF圖片倒放播放的方法
GIF(Graphics Interchange Format) 是一種可以用來(lái)呈現(xiàn)動(dòng)畫(huà)效果的圖片格式,原理就是保存很多幀(Frame)靜態(tài)圖像,然后連續(xù)呈現(xiàn)。這篇文章主要介紹了用Python將動(dòng)態(tài)GIF圖片倒放播放的方法,需要的朋友可以參考下2016-11-11
np.concatenate()函數(shù)數(shù)組序列參數(shù)的實(shí)現(xiàn)
本文主要介紹了np.concatenate()函數(shù)數(shù)組序列參數(shù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
使用Python實(shí)現(xiàn)將HTML內(nèi)容格式插入Word文檔
在日常開(kāi)發(fā)和業(yè)務(wù)流程中,我們經(jīng)常需要生成包含復(fù)雜格式和動(dòng)態(tài)內(nèi)容的Word文檔,本文將介紹如何使用Python實(shí)現(xiàn)將HTML內(nèi)容格式插入Word文檔,感興趣的小伙伴可以了解下2026-01-01
如何使用Python 抓取和優(yōu)化所有網(wǎng)站圖像
我發(fā)布了一個(gè)通過(guò)FTP自動(dòng)優(yōu)化新圖像的教程。這次我們將抓取整個(gè)網(wǎng)站,并在本地優(yōu)化我們遇到的圖像,按URL組織,怎么來(lái)操作呢,下面跟隨小編一起學(xué)習(xí)使用Python 抓取和優(yōu)化所有網(wǎng)站圖像的方法,感興趣的朋友一起看看吧2023-02-02
Python使用scipy進(jìn)行曲線擬合的方法實(shí)例
這篇文章主要給大家介紹了關(guān)于Python使用scipy進(jìn)行曲線擬合的相關(guān)資料,Scipy優(yōu)化和擬合采用的是optimize模塊,該模塊提供了函數(shù)最小值(標(biāo)量或多維)、曲線擬合和尋找等式的根的有用算法,需要的朋友可以參考下2022-05-05
TensorFlow中tf.batch_matmul()的用法
這篇文章主要介紹了TensorFlow中tf.batch_matmul()的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
python列表中remove()函數(shù)的使用方法詳解
這篇文章主要給大家介紹了關(guān)于python列表中remove()函數(shù)的使用,以及Python列表的remove方法的注意事項(xiàng),文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-12-12
python3編寫(xiě)ThinkPHP命令執(zhí)行Getshell的方法
這篇文章主要介紹了python3編寫(xiě)ThinkPHP命令執(zhí)行Getshell的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-02-02

