如何在python中编辑csv并在第二行之后添加一行,该行在除1之外的所有列中具有相同的值

如何在python中编辑csv并在第二行之后添加一行,该行在除1之外的所有列中具有相同的值,python,csv,Python,Csv,我是Python语言新手,我面临着一个小挑战,到目前为止我还没有弄明白。 我收到一个csv文件,大约有30-40列和5-50行,每个单元格中有各种详细信息。csv的第一行有每列的标题,第二行有项目值。 我想做的是创建一个python脚本,该脚本将读取csv文件,每次执行以下操作: 在实际的第一个项目行之后添加一行(字面上在第二行之后,因为第一行是标题),并在新的第三行中包含与上述信息相同的信息,但仅存在一个差异。在“项目小计”列中,我想添加“折扣总额”列中的值。 以下所有行应保持原样,并将此修改

我是Python语言新手,我面临着一个小挑战,到目前为止我还没有弄明白。 我收到一个csv文件,大约有30-40列和5-50行,每个单元格中有各种详细信息。csv的第一行有每列的标题,第二行有项目值。 我想做的是创建一个python脚本,该脚本将读取csv文件,每次执行以下操作: 在实际的第一个项目行之后添加一行(字面上在第二行之后,因为第一行是标题),并在新的第三行中包含与上述信息相同的信息,但仅存在一个差异。在“项目小计”列中,我想添加“折扣总额”列中的值。 以下所有行应保持原样,并将此修改后的csv保存为新文件,文件名中添加“编辑”一词。 我真的需要一些帮助,因为到目前为止,我只使用我正在开发的python脚本打开了csv文件,但到目前为止,我还无法将上述行的内容添加到新创建的行中并替换该特定值。 期待任何帮助。 多谢各位

在这里,我附加了一些由于隐私原因更改的CSV值

订单号、订单号、日期、状态、发货总额、发货税总额、费用总额、费用税总额、税收总额、折扣总额、订单总额、退款总额、订单币种、付款方式、发货方式、客户id、账单名、账单姓、账单公司、账单电子邮件、账单电话、账单地址1、账单地址2、账单邮编、,开票城市、开票州、开票国家、发货名、发货姓氏、发货地址1、发货地址2、发货邮编、发货城市、发货州、发货国家、发货公司、客户备注、商品id、商品id、商品id、商品名称、商品sku、商品数量、商品小计、商品小计、商品税、商品税总额、商品退税、,项目\退款\数量、项目\元、装运\项目、费用\项目、税费\项目、优惠券\项目、订单\备注、下载\权限\授予、管理\自定义\订单\字段:客户\类型\ 5
15001_TEST_2,,“2017-10-09 18:53:12”,处理,0,0.00,0.00,5.36,7.06,33.60,0.00,欧元,Paynecw_PayPal,“0,00”,0,姓名,姓氏,姓名。surname@gmail.com,0123456789,“地址1”,41541_测试,地点,DE,姓名,姓氏,地址,0124521214521,地点,DE,1328302,“产品名称”,103,1,35.29,6.71,28.24,5.36,0.00,0,,,“id:1329 |方法| id:free | u shipping:3 |方法|标题:0,00 |总计:0.00”、id:1330 |费率| id:1 |代码:DE-MWST-1 |标题:MWST |总计:5.36 |化合物:,“id:1331 |代码:| getgreengent |金额:7.06 |描述:朋友启动优惠券”,“文本字符串”“,1,

第一步是将.csv转换为更易于使用的内容。幸运的是,python具有“csv”模块,可以轻松地将.csv文件转换为更好的列表。下面将为您提供一种方法,既可以将.csv转换为列表,也可以将修改后的数据转换回.csv文件

import csv
import copy

def csv2list(ifile):
    """
    ifile = the path of the csv to be converted into a list of lists
    """
    f = open(ifile,'rb')
    olist=[]
    c = csv.reader(f, dialect='excel')
    for line in c:
        olist.append(line) #and update the outer array
    f.close
    return olist

#------------------------------------------------------------------------------
def list2csv(ilist,ofile):
    """
    ilist =  the list of lists to be converted
    ofile = the output path for your csv file
    """
    with open(ofile, 'wb') as csvfile:
        csvwriter = csv.writer(csvfile, delimiter=',',
                            quotechar='|', quoting=csv.QUOTE_MINIMAL)
        [csvwriter.writerow(x) for x in ilist]
现在,您可以简单地复制列表[1]并更改相应的元素以反映您的合计值,方法是:

listTemp = copy.deepcopy(ilist[1])
listTemp[n] = listTemp[n] + listTemp[n-x]

ilist.insert(2,listTemp)
至于如何更改文件名,只需使用:

import os

newFileName = os.path.splitext(oldFileName)[0] + "edited" + os.path.splitext(oldFileName)[1] 

希望这能帮到你

您还可以使用pandas操作csv中的数据,如下所示:

import pandas
import copy
将csv文件读入数据帧:

df = pandas.read_csv(filename)
对第一行数据进行深度复制,并将折扣总额添加到项目小计中:

new_row = copy.deepcopy(df.loc[1])
new_row['item_subtotal'] += new_row['discount total']
将前两行与新行连接,然后将其后的所有内容连接起来:

df = pandas.concat([df.loc[:1], new_row, df.loc[2:]], ignore_index=True)
更改文件名并写出新的csv文件:

filename = filename.strip('.csv') + 'edited.csv'
df.to_csv(filename)

我希望这有帮助!熊猫非常适合干净地处理大量数据,但对于你正在尝试做的事情来说,它可能会有点过头。再说一次,也许不是。查看示例数据文件会有所帮助。

发布输入文件内容和预期结果全部文本,没有输入数据示例,也没有预期输出。被否决。请阅读:嗨,安东,我已经编辑了我的帖子并添加了示例数据。对不起,我犯了个新手错误。谢谢你,麦肯齐,我明天会发表评论和我的结果。我没有太多使用熊猫,但是是的,似乎我确实需要做一些关于这个主题的学习和练习。你好,L.麦肯齐非常感谢你的回答和帮助!真的,我当时还不能写这段代码,因为我对熊猫没有那么多经验,但看起来像是一个很棒的图书馆,我已经在里面进一步学习了。现在,我已经测试了你的代码,但是我得到了以下错误:keyrerror:“标签[1]不在[index]中。”我编辑了我的帖子,并添加了CSV作为示例。当我在Excel中打开CSV时,CSV内容以行的形式显示,但是当我用Notepad++打开它时,没有行。那么现在该如何改变这个值呢?再次感谢您againNotepad++将csv文件视为简单的文本文件,但Excel将其视为csv(逗号分隔值),因此它将值分隔为不同的列。这就是为什么它在Excel和Notepad++中看起来有所不同。至于您得到的KeyError,如果没有完整的回溯和您使用的csv文件运行的代码,就很难进行调试。你好,Keith,我遵循了您的建议,尽管它会在控制台中打印出列表,我得到以下错误:TypeError:描述符“insert”需要一个“list”对象,但收到了一个“str”。我尝试将该整数更改为其他值,但仍然没有找到正确的方法。非常感谢你的帮助。希望不久,我也能帮助别人!如果我不添加:def listemp(list):在listemp=list[1]之前,还有更多内容。。我得到一个错误:TypeError:'type'对象不是subscriptableTo澄清一下,我使用的是Python 2.7。。。我能够让代码在一个随机的test.csv文件上运行。当然,我并没有实际使用“list”作为变量名。此外,您还需要使用“导入副本”和