簡體   English   中英

如何將字典中的現有 csv 文件寫入特定列?

[英]How can I write to an existing csv file from a dictionary to a specific column?

我有一個從 csv 文件創建的字典,並想使用這個 dict 來更新名為 sheet2.csv 的不同 csv 文件的特定列中的值。

Sheet2.csv 有許多具有不同標題的列,我只需要根據我的字典中的鍵值對更新列 PartNumber。

我的問題是如何使用 dict 中的鍵來搜索 sheet2.csv 並僅更新/寫入具有適當值的 PartNumber 列?

我是 python 新手,所以我希望這不會太混亂,任何幫助表示贊賞!

這是我用來創建字典的代碼:

import csv 
a = open('sheet1.csv', 'rU')
csvReader = csv.DictReader(a)
dict = {}

for line in csvReader:
    dict[line["ReferenceID"]] = line["PartNumber"]
print(dict)    

dict = {'R150': 'PN000123', 'R331': 'PN000873', 'C774': 'PN000064', 'L7896': 'PN000447', 'R0640': 'PN000878', 'R454': 'PN000333'}

為了讓事情更加混亂,我還需要確保 sheet2 中已經存在的行保持不變。 例如,如果有一行的 ReferenceID 為 R1234,PartNumber 為 PN000000,它應該保持不變。 所以我需要跳過不在我的字典中的行。

鏈接到示例 CSV:

編輯:讓我重新表述我的問題並提供一個更好的示例 csvfile。

假設我有一個 Dict = {'R150': 'PN000123', 'R331': 'PN000873', 'C774': 'PN000064', 'L7896': 'PN000447', 'R064004'R06404'87' ':'PN000333'}。

我需要填寫這個csv文件: https : //www.dropbox.com/s/c95mlitjrvyppef/sheet.csv

具體來說,我需要使用我創建的字典的鍵填寫 PartNumber 列。 所以我需要遍歷列 ReferenceID 並將該值與字典中的鍵進行比較。 如果有匹配項,我需要使用該值填寫相應的 PartNumber 單元格....如果這一切都令人困惑,我很抱歉!

下面的代碼應該可以解決問題。 它首先像您的代碼一樣構建一個字典,然后繼續逐行讀取Sheet2.csv ,可能會更新部件號。 輸出到temp.csv ,您可以將其與初始Sheet2.csv進行比較。 如果要覆蓋Sheet2.csv與內容temp.csv ,只需取消注釋與線shutil.move

請注意,您提供的示例文件不包含任何可更新的數據,因此Sheet2.csvtemp.csv將相同。 我使用稍微修改過的Sheet1.csv對此進行了測試,其中我確保它實際上包含Sheet2.csv使用的參考 ID。

import csv
import shutil


def createReferenceIdToPartNumberMap(csvToReadPath):
    result = {}
    print 'read part numbers to update from', csvToReadPath
    with open(csvToReadPath, 'rb') as csvInFile:
        csvReader = csv.DictReader(csvInFile)
        for row in csvReader:
            result[row['ReferenceID']] = row['PartNumber']
    return result


def updatePartNumbers(csvToUpdatePath, referenceIdToPartNumberMap):
    tempCsvPath = 'temp.csv'
    print 'update part numbers in', csvToUpdatePath
    with open(csvToUpdatePath, 'rb') as csvInFile:
        csvReader = csv.reader(csvInFile)

        # Figure out which columns contain the reference ID and part number.
        titleRow = csvReader.next()
        referenceIdColumn = titleRow.index('ReferenceID')
        partNumberColumn = titleRow.index('PartNumber')

        # Write tempoary CSV file with updated part numbers.
        with open(tempCsvPath, 'wb') as tempCsvFile:
            csvWriter = csv.writer(tempCsvFile)
            csvWriter.writerow(titleRow)
            for row in csvReader:
                # Check if there is an updated part number.
                referenceId = row[referenceIdColumn]
                newPartNumber = referenceIdToPartNumberMap.get(referenceId)
                # If so, update the row just read accordingly.
                if newPartNumber is not None:
                    row[partNumberColumn] = newPartNumber
                    print '  update part number for %s to %s' % (referenceId, newPartNumber)
                csvWriter.writerow(row)

        # TODO: Move the temporary CSV file over the initial CSV file.
        # shutil.move(tempCsvPath, csvToUpdatePath)


if __name__ == '__main__':
    referenceIdToPartNumberMap = createReferenceIdToPartNumberMap('Sheet1.csv')
    updatePartNumbers('Sheet2.csv', referenceIdToPartNumberMap)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM