第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用列表比較和更新 CSV 文件

使用列表比較和更新 CSV 文件

江戶川亂折騰 2023-06-27 17:21:30
我正在寫一些需要兩個 CSV 的內(nèi)容:#1 是電子郵件列表,每封電子郵件收到 # 封電子郵件,#2 是記錄中的每個電子郵件地址的目錄,每個報告期間收到的電子郵件編號,日期在頂部注釋列。import csvfrom datetime import datetimedatestring = datetime.strftime(datetime.now(), '%m-%d')storedEmails = []newEmails = []sortedList = []holderList = []with open('working.csv', 'r') as newLines, open('archive.csv', 'r') as oldLines:   #readers to make lists    f1 = csv.reader(newLines, delimiter=',')    f2 = csv.reader(oldLines, delimiter=',')    print ('Processing new data...')    for row in f2:        storedEmails.append(list(row))                                   #add archived data to a list    storedEmails[0].append(datestring)                                   #append header row with new date column    for col in f1:        if col[1] == 'email' and col[2] == 'To Address':                 #new list containing new email data            newEmails.append(list(col))    counter = len(newEmails)    n = len(storedEmails[0])                                             #using header row len to fill zeros if no email received    print(storedEmails[0])    print (n)    print ('Updating email lists and tallies, this could take a minute...')with open ('archive.csv', 'w', newline='') as toWrite:                   #writer to overwrite old csv    writer = csv.writer(toWrite, delimiter=',')    for i in newEmails:        del i[:3]                   #strip useless identifiers from data        if int(i[1]) > 30:          #only keep emails with sufficient traffic            sortedList.append(i)    #add these emails to new sorted listCSV 看起來與此類似。我不確定我在哪里出錯了 - 但它不斷產(chǎn)生重復(fù)的條目。一些功能是存在的,但我已經(jīng)使用它太久了,我的視野狹隘,試圖找出我的循環(huán)做錯了什么。我知道我的零填充部分最終也是錯誤的,因為它將附加到新創(chuàng)建的記錄的末尾,而不是填充零直到其第一次出現(xiàn)。我確信有更有效的方法可以做到這一點,我是編程新手,所以它可能過于復(fù)雜和混亂 - 最初我嘗試將 CSV 與 CSV 進行比較,并意識到這是不可能的,因為你不能同時讀寫時間,所以我嘗試轉(zhuǎn)換為使用列表,我也知道當(dāng)列表變大時,由于內(nèi)存限制,列表不會永遠工作。
查看完整描述

2 回答

?
慕俠2389804

TA貢獻1719條經(jīng)驗 獲得超6個贊

  • 我會加載數(shù)據(jù)pandas.read_csv

  • .rename一些專欄

    • 創(chuàng)建數(shù)據(jù)幀后working,查看數(shù)據(jù)幀以驗證已加載正確的列,并且使用正確的列索引進行重命名。

    • 重命名 , 中的列working取決于列索引,因為working.csv沒有列標(biāo)題。

    • datearch實際上應(yīng)該是email,因為標(biāo)題標(biāo)識其下方的內(nèi)容,而不是其他列標(biāo)題。

    • 一旦在 中更改了列名稱archive.csv,則不再需要重命名。

  • pandas.merge在柱子上email

    • 由于兩個數(shù)據(jù)框都有一列重命名為email,因此合并結(jié)果將只有一email列。

    • 如果合并發(fā)生在兩個不同的列名稱上,則結(jié)果將有兩列包含電子郵件地址。

    • pandas:合并、連接、連接和比較

  • 只要文件中的列一致,就應(yīng)該無需修改即可工作

import pandas as pd

from datetime import datetime


# get the date string

datestring = datetime.strftime(datetime.now(), '%d-%b')


# read archive

arch = pd.read_csv('archive.csv')


# rename columns

arch.rename(columns={'date': 'email'}, inplace=True)


# read working, but only the two columns that are needed

working = pd.read_csv('working.csv', header=None, usecols=[1, 3])


# rename columns

working.rename(columns={1: 'email', 3: datestring}, inplace=True)


# only emails greater than 30 or already in arch

working = working[(working[datestring] > 30) | (working.email.isin(arch.email))]


# merge

arch_updated = pd.merge(arch, working, on='email', how='outer').fillna(0)


# save to csv

arch_updated.to_csv('archive.csv', index=False)


# display(arch_updated)

? ? ? ? ? email? 01-sep? 27-Aug

?asdf@email.com? ?154.0? ? 31.0

?fsda@email.com? ?128.0? ? 19.0

?qwer@gmail.com? ? 77.0? ? 92.0

?ffff@xmail.com? ? 63.0? ? ?0.0

?zxcv@email.com? ? ?0.0? ?117.0


查看完整回答
反對 回復(fù) 2023-06-27
?
慕沐林林

TA貢獻2016條經(jīng)驗 獲得超9個贊

所以,問題是你有兩組數(shù)據(jù)。兩者都通過“關(guān)鍵”條目(電子郵件)存儲數(shù)據(jù)以及您想要壓縮到一個存儲中的其他數(shù)據(jù)。確定這兩組數(shù)據(jù)都存在相似的“密鑰”可以大大簡化這一過程。


將每個鍵想象為一個存儲桶的名稱。每個存儲桶需要兩條信息,一條來自一個 csv,另一條來自另一個 csv。


現(xiàn)在,我必須繞點小彎路來解釋一下Python中的字典。這是從這里竊取的定義


字典是一個無序、可更改且有索引的集合。


集合是一個類似于保存數(shù)據(jù)的列表的容器。無序和索引意味著字典不能像列表一樣訪問,其中數(shù)據(jù)可以通過索引訪問。在這種情況下,字典是使用鍵訪問的,鍵可以是字符串或數(shù)字之類的任何東西(從技術(shù)上講,鍵必須是可散列的,但這太深入了)。最后,可更改意味著字典實際上可以更改其存儲的數(shù)據(jù)(再次過于簡單化)。


例子:


dictionary = dict()

key = "Something like a string or a number!"

dictionary[key] = "any kind of value can be stored here! Even lists and other dictionaries!"

print(dictionary[key])? # Would print the above string

我建議您使用以下結(jié)構(gòu)來代替大多數(shù)列表:


dictionary[email] = [item1, item2]

這樣,您可以避免使用多個列表并大大簡化您的代碼。


查看完整回答
反對 回復(fù) 2023-06-27
  • 2 回答
  • 0 關(guān)注
  • 193 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號