我有兩個 csv 檔案,我想打開并從兩個 csv 檔案中獲取唯一 ID。每個 id 都有我想獲取并減去這些日期的特定日期。問題是我需要從一個 csv 獲取一個日期,從另一個 csv 獲取另一個日期。兩個 csv 檔案都有一些我不需要的資料,所以在我的代碼中,我創建了新的字典,并從兩個 csv 檔案中提取了這些日期,并將它們轉儲到一個新的 JSON 檔案中。我想指出,在一個 csv 檔案中,唯一 id 聚集在 csv 檔案的中間,而其他唯一 id 聚集在最后,所以在運行代碼時,我注意到代碼不斷重新啟動回到頂部csv 并且不會繼續檢查 csv 檔案中的唯一 ID。
該代碼適用于函式 make_json(),它獲取我想要的資料并減去 CSV 中的兩個日期,然后將它們轉儲到 JSON 檔案中。另一個名為 getMarginDict() 的函式來自另一個 CSV 檔案,該檔案中也有日期。唯一的區別是我需要減去的日期在另一個 CSV 檔案中。我需要從 csv1 中獲取日期并從 csv2 中減去日期,但如上所述,代碼會一直在頂部進行處理。我相信它是因為該檔案再次打開。有沒有辦法讓代碼繼續將唯一 ID 處理到它停止的地方。最后,代碼在檢查第一個唯一 ID 時有效,但隨后重新啟動。
這是最終的 JSON 檔案的樣子:如您所見,名為 New Date 的最后三個欄位未正確計算,但前兩個欄位計算正確。
{"Name": "1", "Unique ID": "1357", "Date Finish": "06/19/2024", "Date Completed": "06/19/2024", "Date Left": 775, "Date Completed-Today's Date": 775, "New Date": 43}
{"Name": "2", "Unique ID": "1357", "Date Finish": "06/19/2024", "Date Completed": "06/19/2024", "Date Left": 775, "Date Completed-Today's Date": 775, "New Date": 43}
{"Name": "3", "Unique ID": "7531", "Date Finish": "12/25/2024", "Date Completed": "12/25/2024", "Date Left": 964, "Date Completed-Today's Date": 964, "New Date": -146}
{"Name": "4", "Unique ID": "7531", "Date Finish": "12/25/2024", "Date Completed": "12/25/2024", "Date Left": 964, "Date Completed-Today's Date": 964, "New Date": -146}
{"Name": "5", "Unique ID": "7531", "Date Finish": "12/25/2024", "Date Completed": "12/25/2024", "Date Left": 964, "Date Completed-Today's Date": 964, "New Date": -146}
data = {}
newData = []
marginData = {}
def incrementSV(data,x):
data["Name"] = str(x)
return x
def createNewDict(data, IDNum, endDate, latefinish, diffBaseline, diffLateFinish):
return data, IDNum, endDate, latefinish, diffBaseline, diffLateFinish
def createNewDict(data, IDNum, endDate, latefinish, diffBaseline, diffLateFinish):
data["Unique ID"] = IDNum
data["Date Finish"] = endDate
data["Date Completed"] = latefinish
data["Days Left"] = diffBaseline.days
data["Date Completed-Today's Date"] = diffLateFinish.days
def getMarginDict(endDateNew):
with open(csvFilePathIMS, encoding='utf-8-sig') as csvf:
csvReaderGR = csv.DictReader(csvf)
for newsRows in csvReaderGR:
uuid = newsRows["Unique ID"]
laterDate= newsRows["Finish"]
laterDateNew= datetime.datetime.strptime(laterDate, '%m/%d/%Y')
dateNew= laterDateNewNew.date() - endDateNew9.date()
if int(uuid) == 1234:
marginData["New Date"] = dateNew.days
return marginData
elif int(uuid) == 4321:
marginData["New Date"] = dateNew.days
return marginData
def make_json(csvFilePath,jsonFilePath):
es = Elasticsearch("localhost",)
# Open a csv reader called DictReader
with open(csvFilePath, encoding='utf-8-sig') as csvf:
csvReader = csv.DictReader(csvf)
# Convert each row into a dictionary
# and add it to data
for rows in csvReader:
IDNum = rows['Unique ID']
endDate = rows['End Date']
latefinish = rows['Date Completed']
endDateNew= datetime.datetime.strptime(endDate, '%m/%d/%Y')
diffBaseline = endDateNew.date() - datetime.date.today()
newLatefinishDate = datetime.datetime.strptime(latefinish, '%m/%d/%Y')
diffLateFinish = newLatefinishDate.date() - datetime.date.today()
imsData = partial(createNewDict, data, IDNum, endDate, latefinish, diffBaseline, diffLateFinish)
if int(IDNum) == 1357:
for x in range(1,3):
incrementSV(data,x)
imsData()
getMarginDict(endDateNew)
totalIMS = dict(data, **marginData)
newData.append(dict(totalIMS))
elif int(IDNum) == 7531:
for x in range(3,6):
incrementSV(data,x)
imsData()
getMarginDict(endDateNew)
totalIMS = dict(data, **marginData)
newData.append(dict(totalIMS))
with open(jsonFilePath, 'w', encoding='utf-8') as jsonf:
for item in newData:
x = json.dump(item,jsonf)
jsonf.write('\n')
csvFilePath = "location of 1st csv file"
jsonFilePath = "location of JSON file"
csvFilePathIMS = 'location of 2nd csv file'
# Call the make_json function
make_json(csvFilePath,jsonFilePath)
uj5u.com熱心網友回復:
每次呼叫 getMarginDict 時,您都在使用with open(csvFilePathIMS, encoding='utf-8-sig') as csvf:, 打開和讀取 csv 檔案。由于這是一個背景關系管理器,當您退出“with open...”陳述句的范圍時,檔案會自動關閉。
聽起來您打算做的是打開檔案一次并逐行讀取。為此,您可以使用csvReaderGR = csv.DictReader(open(csvFilePathIMS, encoding='utf-8-sig'))并重復使用此實體打開檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/471979.html
上一篇:遍歷字典中的串列
