以CSV格式混合列?

时间:2018-04-05 22:01:22

标签: python csv

我有一个csv文件,我需要混合两个列:

Sitio, ID_espacio, Espacio, Tamano, Country, Impresiones_exchange, Importe_a_cobrar, eCPM, Subastas, Fill_rate
NUEVO_Infotechnology, 264244, NUEVO_Infotechnology - Home_IT - IT_Header, Variable (1240x90), Bangladesh, 0, 0.00, 0.00, 1, 0.00
NUEVO Apertura, 274837, NUEVO Apertura - Nota_Ap - Right3_300x250, 300x250, Paises Bajos, 0, 0.00, 0.00, 4, 0.00

问题是我需要将ID_espacioEspacio混合,但这样:

示例:

NUEVO_Infotechnology, 264244, NUEVO_Infotechnology - Home_IT - IT_Header, Variable (1240x90), Bangladesh, 0, 0.00, 0.00, 1, 0.00

我需要什么:

NUEVO_Infotechnology, 264244 - Home_IT - IT_Header, Variable (1240x90), Bangladesh, 0, 0.00, 0.00, 1, 0.00

如您所见,我删除了Espacio的第一个名称,直到' - '然后我放了ID_espacio

我试图这样做但我可以,但现在我需要拥有所有csv,而不仅仅是我的修改:

import csv

lista_ok = []
base = []

with open("test.csv", 'rb') as f:
    reader = csv.reader(f)
    your_list = list(reader)

for item in your_list[1:]:
    a = item[2].split(" - ")
    base.append(a)

for item in base:
    for itemf in your_list[1:]:
        b = []
        a = itemf[1] + ' - ' + ' - '.join(item[1:])
        b.append(a)
        lista_ok.append(b)

输出:

[[' 264244 - Home_IT - IT_Header'], [' 274837 - Home_IT - IT_Header'], [' 264244 - Nota_Ap - Right3_300x250'], [' 274837 - Nota_Ap - Right3_300x250']]

我需要的输出:

[['Sitio', ' ID_espacio', ' Espacio', ' Tamano', ' Country', ' Impresiones_exchange', ' Importe_a_cobrar', ' eCPM', ' Subastas', ' Fill_rate'], ['NUEVO_Infotechnology', ' 264244 - Home_IT - IT_Header', ' Variable (1240x90)', ' Bangladesh', ' 0', ' 0.00', ' 0.00', ' 1', ' 0.00'], ['NUEVO Apertura', ' 274837 - Nota_Ap - Right3_300x250', ' 300x250', ' Paises Bajos', ' 0', ' 0.00', ' 0.00', ' 4', ' 0.00']]

2 个答案:

答案 0 :(得分:0)

您可以编写一个以您想要的方式转换单行的函数。然后在从文件中读取该行并将其放入最终列表时,为每一行调用该函数:

def row_transform(row, is_header=False):
    if not is_header:
        # trim Sitio from Espacio
        row[2] = row[2].split(" - ", 1)[1]
        # add ID to espacio
        row[2] = " - ".join((row[1], espacio))
    # remove ID col
    del row[1]
    return row

with open("test.csv") as fp:
    reader = csv.reader(fp)
    lista_ok = [row_transform(next(reader), True)]
    lista_ok.extend((row_transform(row) for row in reader))

答案 1 :(得分:0)

这是另一个版本:

import csv

lista_ok = []

with open("test.csv", 'rb') as f:
    reader = csv.reader(f)
    your_list = list(reader)

for item in your_list:
    sitio = item[0]
    id_espacio = item[1]
    item.remove(id_espacio)
    espacio_parts = item[1].split(' - ')
    if your_list.index(item) > 0:
        espacio_parts[0] = espacio_parts[0].lstrip().replace(sitio,id_espacio)
        espacio = ' - '.join(espacio_parts)
        item[1] = espacio
    lista_ok.append(item)