亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

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

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

江戶川亂折騰 2023-06-27 17:21:30
我正在寫一些需要兩個 CSV 的內容:#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 看起來與此類似。我不確定我在哪里出錯了 - 但它不斷產生重復的條目。一些功能是存在的,但我已經使用它太久了,我的視野狹隘,試圖找出我的循環做錯了什么。我知道我的零填充部分最終也是錯誤的,因為它將附加到新創建的記錄的末尾,而不是填充零直到其第一次出現。我確信有更有效的方法可以做到這一點,我是編程新手,所以它可能過于復雜和混亂 - 最初我嘗試將 CSV 與 CSV 進行比較,并意識到這是不可能的,因為你不能同時讀寫時間,所以我嘗試轉換為使用列表,我也知道當列表變大時,由于內存限制,列表不會永遠工作。
查看完整描述

2 回答

?
慕俠2389804

TA貢獻1719條經驗 獲得超6個贊

  • 我會加載數據pandas.read_csv

  • .rename一些專欄

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

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

    • datearch實際上應該是email,因為標題標識其下方的內容,而不是其他列標題。

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

  • pandas.merge在柱子上email

    • 由于兩個數據框都有一列重命名為email,因此合并結果將只有一email列。

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

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

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

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

[email protected]? ?154.0? ? 31.0

[email protected]? ?128.0? ? 19.0

[email protected]? ? 77.0? ? 92.0

[email protected]? ? 63.0? ? ?0.0

[email protected]? ? ?0.0? ?117.0


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

TA貢獻2016條經驗 獲得超9個贊

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


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


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


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


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


例子:


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

我建議您使用以下結構來代替大多數列表:


dictionary[email] = [item1, item2]

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


查看完整回答
反對 回復 2023-06-27
  • 2 回答
  • 0 關注
  • 185 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號