Python CSV将单元格从一个CSV文件复制到另一个CSV文件

2024-10-01 13:27:35 发布

您现在位置:Python中文网/ 问答频道 /正文

编辑:这个问题已经解决了。我已经在这篇文章的底部添加了解决方案。在

我有两份文件,新闻报道.csv以及sortedBlad.csv. 在

在新闻报道.csv看起来像

SKU_IN,QTY_IN
3201MO-1,1
320205-1,4

在sortedBlad.csv看起来像

^{pr2}$

我现在的密码通过了sortedBlad.csv并复制eid、sku和name列并将它们插入另一个文件中。它还匹配newStock中的sku并将它们附加到每行的末尾。我面临的问题是,我似乎无法从新库存中得到数量也被追加到每行的末尾。目前代码的输出如下。在

    1.11E+11,3201MO-1,5,FORD FOCUS MK1 98 04  OIL SUMP PAN FOR ENGINE  1.8 16V 2.0 16V  & ST RS PETROL,3201MO-1,,
    1.21E+11,320205-1,6,FORD FOCUS 2004  2008 FRONT BUMPER  RADIATOR GRILLE BONNET WITH CHROME TRIM,320205-1,,

您可以看到sku被追加到行的末尾。我还想在sku之后追加新库存数量。在

到目前为止,我得到的代码如下。在

import csv

test_file = "sortedBlad.csv"
test_file2 = "sortedNewStock.csv" 

test_file2_array = []

finalFile = "final.csv"

csv_f_array = []

csv_file = csv.DictReader(open(test_file, 'r'), delimiter=',', quotechar='"')
csv_file2 = csv.DictReader(open(test_file2, 'r'), delimiter=',', quotechar='"')


with open(test_file2, 'rt') as a:
        reader = csv.reader(a, delimiter=",")
        for row in reader:
            test_file2_array.append(row[0])

#print(test_file2_array)

file = open(finalFile, 'w')

for eachline in csv_file:
    for SKU_IN in test_file2_array:
        if SKU_IN == eachline['sku']:
            print(SKU_IN+'-'+test_file2_array[1])
            # why wont you write the qty?
         file.write(eachline['eid']+','+eachline['sku']+','+eachline['QTY']+','+eachline['Name']+','+SKU_IN+','+',\n')

file.close

谢谢你们的回复。在reddit的learnpython irc中,我设法解决了这个问题。在

解决方案是使用字典将SKU_帴IN存储为键,将QTY_IN存储为值。当我写文件的时候就这么叫了。在


Tags: 文件csvintestopenarrayfile2file
3条回答

您只将sortedNewStock.csvSKU_IN)的第一列附加到test_file2_array

test_file2_array.append(row[0])

您还需要从该文件中获取QTY_IN列。我建议使用以下方法同时添加SKU_IN和{}:

^{2}$

然后改变

for SKU_IN in test_file2_array:

for SKU_IN, QTY_IN in test_file2_array:

所以你的代码应该是这样的:

.
.
.
with open(test_file2, 'rt') as a:
    test_file2_array = [row[0:2] for row in csv.reader(a, delimiter=",")]

#print(test_file2_array)

file = open(finalFile, 'w')

for eachline in csv_file:
    for SKU_IN, QTY_IN in test_file2_array:
        if SKU_IN == eachline['sku']:
            print(SKU_IN + '-' + QTY_IN)
            file.write(','.join((eachline['eid'], eachline['sku'],
                                 eachline['QTY'], eachline['Name'],
                                 SKU_IN, QTY_IN, '\n')))

您没有将QTY_IN信息保存在newStock.csv的任何地方。在

import csv

blad_file = "blad.csv"
newStock_file = "stock.csv" 

newStock_file_array = []

finalFile = "final.csv"

csv_blad = csv.DictReader(open(blad_file, 'r'), delimiter=',', quotechar='"')
csv_newStock = csv.DictReader(open(newStock_file, 'r'), delimiter=',', quotechar='"')

for line in csv_newStock:
    newStock_file_array.append(line)

with open(finalFile, 'w') as file_out:
    for eachline in csv_blad:
        for newStock in newStock_file_array:
            if newStock['SKU_IN'] == eachline['sku']:
                # print(newStock['SKU_IN']+'-'+newStock['QTY_IN'])
                file_out.write(eachline['eid']+','+eachline['sku']+','+eachline['QTY']+','+eachline['Name']+','+newStock['QTY_IN']+','+'\n')

您是否考虑过使用一个与表格数据集本机工作的包来支持您想要的操作—例如,pandas?在

import pandas as pd

f1=pd.read_csv("sortedBlad.csv")
f2=pd.read_csv("sortedNewStock.csv")

#Filter columns in f1
f1sub=f1[ ['eid', 'sku', 'name' ] ]

#Merge data
mergef = pd.merge(f1sub,f2,left_on='sku',right_on='SKU_IN')

合并功能将自动为您处理对齐。在

相关问题 更多 >