繁体   English   中英

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

[英]Python CSV copying cells from one csv file to another

编辑:这已经解决。 我已将解决方案添加到本文的底部。

我有两个文件,newStock.csv和sortedBlad.csv。

newStock.csv看起来像

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

sortedBlad.csv看起来像

eid,sku,asd,asdf,Asdg,QTY,sdfasf,asdf,sdfsf,dfsdf,sdfs,dddd,dssss,Name,dddddpo,odommm,mdmdjkon,kkkkknn,okokokok,okokokb,jj,mb,bgtio,

1.11E+11,3201MO-1,,,,5,55,,£20.90,08-Aug-14,,New,9,FORD FOCUS MK1 98 04  OIL SUMP PAN FOR ENGINE  1.8 16V 2.0 16V  & ST RS PETROL,Oil Sumps,174039,,3,27-Jan-15 11:44:30 GMT,,,1000,FALSE,

我目前拥有的代码通过sortedBlad.csv并复制eid,sku和name列,并将它们插入另一个文件中。 它还会匹配newStock中的草图并将它们附加到每行的末尾。 我面临的问题是,我似乎无法从新库存中获取数量,也无法将其附加到每行的末尾。 当前代码的输出如下。

    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之后附加newStock数量。

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

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中的learningpython irc的某人的帮助下解决了该问题。

解决方案是使用字典将SKU_IN作为键存储,将QTY_IN作为值存储。 然后在写文件时调用它。

您是否考虑过使用与表格数据集本机兼容的程序包来支持所需的操作,例如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')

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

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

test_file2_array.append(row[0])

您还需要从该文件中获取QTY_IN列。 我建议以下内容同时添加SKU_INQTY_IN

test_file2_array.append(row[0: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')))

您不会在任何地方保留来自newStock.csvQTY_IN信息。

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')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM