导入csv,操作并导出到cs

2024-05-29 03:18:37 发布

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

我有一个csv文件,其中包含一些行和列。我需要从表中选取一些特定的值,增强它们,然后将它们导出到另一个csv文件。你知道吗

我的Python 3代码如下所示:

import csv
from urllib.parse import quote

afn='https://r.refinedads.com/bs-mapping.php?v=a1&aid=7909&oid=1031&url='
zx='https://r.refinedads.com/bs-mapping.php?v=z1&aid=3814&oid=1031&zanpid=##zxClickID##&userid=##UserID##&url='
zxpn='https://r.refinedads.com/bs-mapping.php?v=z1&aid=3840&oid=1031&zanpid=##zxClickID##&userid=##UserID##&url='
la='https://r.refinedads.com/bs-mapping.php?aid=3843&oid=1031&c1=leadalliance&c2=XXXXX&c3=default&clid=YYYYY&url='
tv='https://r.refinedads.com/bs-mapping.php?aid=7639&oid=1031&c1=leadalliance&c2=XXXXX&c3=default&clid=YYYYY&url='


with open('input_csv.csv', 'r', newline='') as csvfile:
    matrixreader = csv.DictReader(csvfile)
    for row in matrixreader:
        va = afn+quote(row['Link']+'&prf[pid]=[PARTNERID]&prf[a]=[AFFID]'+'-'+row['Promocode'])
        vzx = zx+quote(row['Link']+'&prf[pid]=[PARTNERID]&prf[a]=[AFFID]'+'-'+row['Promocode'])
        vzxpn = zxpn+quote(row['Link']+'&prf[pid]=[PARTNERID]&prf[a]=[AFFID]'+'-'+row['Promocode'])
        vla = la+quote(row['Link']+'&prf[pid]=[PARTNERID]&prf[a]=[AFFID]'+'-'+row['Promocode'])
        vtv = tv+quote(row['Link']+'&prf[pid]=[PARTNERID]&prf[a]=[AFFID]'+'-'+row['Promocode'])
    liste = [[row['Name'], va, vzx, vzxpn, vla, vtv]]
    print(liste)

    with open('output.csv', 'w', newline='') as csvfile:
        a = csv.writer(csvfile, delimiter=',')
        a.writerows(liste)

作为输出,我只接收导出到output.csvinput.csv的最后一行。在我看来,好像代码只是覆盖了第一行。你知道吗

input.csv看起来像这样:

*Name,Promocode,Link

BASE Plus + iPhone 7,ASDFNOWEDF,base.de/base-plus

BASE Pro + iPhone 7,JBONEDGASD,base.de/base-pro

BASE Light + iPhone 7,NAFODSFNTE,base.de/base-light

BASE Pur + iPhone 7,NAEWRIONF,base.de/base-pur*

非常感谢您的帮助, 干杯, 弗兰兹


Tags: csvhttpscombasebslinkmappingquote
2条回答

尝试将liste赋值放入if循环-

import csv
from urllib.parse import quote

afn='https://r.refinedads.com/bs-mapping.php?v=a1&aid=7909&oid=1031&url='
zx='https://r.refinedads.com/bs-mapping.php?v=z1&aid=3814&oid=1031&zanpid=##zxClickID##&userid=##UserID##&url='
zxpn='https://r.refinedads.com/bs-mapping.php?v=z1&aid=3840&oid=1031&zanpid=##zxClickID##&userid=##UserID##&url='
la='https://r.refinedads.com/bs-mapping.php?aid=3843&oid=1031&c1=leadalliance&c2=XXXXX&c3=default&clid=YYYYY&url='
tv='https://r.refinedads.com/bs-mapping.php?aid=7639&oid=1031&c1=leadalliance&c2=XXXXX&c3=default&clid=YYYYY&url='


with open('input_csv.csv', 'r', newline='') as csvfile:
    matrixreader = csv.DictReader(csvfile)
    liste=[] # initialize here
    for row in matrixreader:
        va = afn+quote(row['Link']+'&prf[pid]=[PARTNERID]&prf[a]=[AFFID]'+'-'+row['Promocode'])
        vzx = zx+quote(row['Link']+'&prf[pid]=[PARTNERID]&prf[a]=[AFFID]'+'-'+row['Promocode'])
        vzxpn = zxpn+quote(row['Link']+'&prf[pid]=[PARTNERID]&prf[a]=[AFFID]'+'-'+row['Promocode'])
        vla = la+quote(row['Link']+'&prf[pid]=[PARTNERID]&prf[a]=[AFFID]'+'-'+row['Promocode'])
        vtv = tv+quote(row['Link']+'&prf[pid]=[PARTNERID]&prf[a]=[AFFID]'+'-'+row['Promocode'])
        liste = liste.append([[row['Name'], va, vzx, vzxpn, vla, vtv]]) # keep appending
    print(liste)

    with open('output.csv', 'w', newline='') as csvfile:
        a = csv.writer(csvfile, delimiter=',')
        a.writerows(liste)

一个问题是您试图在read循环之外更新liste变量。另一个问题是重新分配给liste变量,而不是给它分配appending。你知道吗

但是,不需要收集列表中的所有行,然后将它们写入输出。你可以在读的时候把每一行都写下来形成表格。你知道吗

with open('input_csv.csv', 'r', newline='') as csvfile_in:
    with open('output.csv', 'w', newline='') as csvfile_out:
        matrixreader = csv.DictReader(csvfile_in)
        a = csv.writer(csvfile_out, delimiter=',')
        for row in matrixreader:
            va = afn+quote(row['Link']+'&prf[pid]=[PARTNERID]&prf[a]=[AFFID]'+'-'+row['Promocode'])
            vzx = zx+quote(row['Link']+'&prf[pid]=[PARTNERID]&prf[a]=[AFFID]'+'-'+row['Promocode'])
            vzxpn = zxpn+quote(row['Link']+'&prf[pid]=[PARTNERID]&prf[a]=[AFFID]'+'-'+row['Promocode'])
            vla = la+quote(row['Link']+'&prf[pid]=[PARTNERID]&prf[a]=[AFFID]'+'-'+row['Promocode'])
            vtv = tv+quote(row['Link']+'&prf[pid]=[PARTNERID]&prf[a]=[AFFID]'+'-'+row['Promocode'])
            a.writerow([row['Name'], va, vzx, vzxpn, vla, vtv])

这是更有效和内存友好的方式,特别是如果输入文件非常大。你知道吗

相关问题 更多 >

    热门问题