我如何写一个现有的csv文件从字典到特定的列?

我有一个从csv文件创build的字典,并希望使用此字典来更新名为sheet2.csv的另一个csv文件的特定列中的值。

Sheet2.csv有很多不同的标题列,我只需要根据我的字典中的键值对更新列PartNumber。

我的问题是如何在字典中使用键来searchsheet2.csv并更新/只写入具有适当值的列PartNumber?

我是新来的python,所以我希望这不是太混乱,任何帮助表示赞赏!

这是我用来创build字典的代码:

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:

  • http://dropbox.com/s/zkagunnm0xgroy5/Sheet1.csv
  • http://dropbox.com/s/amb7vr48mdc94v6/Sheet2.csv

编辑:让我改述我的问题,并提供一个更好的例子csvfile。

假设我有一个Dict = {'R150':'PN000123','R331':'PN000873','C774':'PN000064','L7896':'PN000447','R0640':'PN000878','R454 ':'PN000333'}。

我需要填写这个csv文件: https : //www.dropbox.com/s/c95mlitjrvyppef/sheet.csv

具体来说,我需要使用我创build的字典的键填写PartNumber列。 所以我需要迭代列ReferenceID,并将该值与我在dict中的键进行比较。 如果有匹配,我需要填写相应的PartNumber单元格的值….我很抱歉,如果这一切混淆!

下面的代码应该做的伎俩。 它首先像您的代码一样构build一个字典,然后逐行读取Sheet2.csv ,可能会更新部件号。 输出转到temp.csv ,您可以将其与Sheet2.csv进行比较。 如果你想用Sheet2.csv的内容覆盖Sheet2.csv ,只需用shutil.move取消注释。

请注意,您提供的示例文件不包含任何可更新数据,因此Sheet2.csvtemp.csv将是相同的。 我用稍微修改过的Sheet1.csvtesting了这个,我确信它实际上包含了由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)