如何根据特定列将特定行从csv文件复制到另一个csv文件?

时间:2017-10-23 15:14:57

标签: python csv

我们假设这是我的数据。

 frame.number    frame.len   frame.cap_len   Packets_Type  
  1               100           100           ICMP_tt   
  2                64            64           UDP   
  3               100           100           ICMP_tt   
  4                87            64           ICMP_nn
  5               100           100           ICMP_tt   
  6                87            64           ICMP_nn
  7               100           100           ICMP_tt   
  8                87            64           ICMP_nn
  9                87            64           ICMP_nn

我将数据放入csv文件中,我想提取Packets_Type等于ICMP_tt

的行
import csv
f = open("file.csv", "rb")
reader = csv.DictReader(f, delimiter=',')
writer = open("newfile.csv",'wb')
writer = csv.writer(writer, delimiter=',')

for row in reader:
    if row['Packets_Type'] == 'ICMP_tt':
        writer.writerow(row)

通过执行这些代码行,我发现了这个错误:

    writer.writerow(row)
_csv.Error: sequence expected

如果你能帮助我,我将非常感激。

3 个答案:

答案 0 :(得分:0)

如果您愿意使用pandas,可以通过以下方式轻松完成:

import pandas as pd

reader = pd.read_csv('file.csv')
writer = reader[reader['Packets_Type']=='ICMP_tt']
writer.to_csv('newfile.csv', index=False)

答案 1 :(得分:0)

此处的问题是您使用csv.writer导入数据,同时使用csv.writer导出数据。 list期望可迭代(tuplecsv.DictWriter),但行值是字典。因此,保存数据的最佳方法是保持一致并使用import csv with open("file.csv", "rb") as f: reader = csv.DictReader(f, delimiter=',') with open("newfile.csv", "wb") as f_out: writer = csv.DictWriter(f_out, fieldnames=reader.fieldnames, delimiter=",") writer.writeheader() for row in reader: if row['Packets_Type'] == 'ICMP_tt': writer.writerow(row) 。以下应该有效:

public List<ReEstablecimientoDTO> consultarEstablecimientosRuesOSB(String numeroIdentificacion)
        throws InvimaException {
    logger.info("Inicia negocio: consultarEstablecimientosRuesOSB");
    try {
        // Lista de los establecimientos encontrados
        List<ReEstablecimientoDTO> reEstablecimientoDTOList = new ArrayList<ReEstablecimientoDTO>();
        // Clase encargada de llamar al servicio de rues ubicado en el bus
        GestionEstablecimientosEntidad_Service service = new GestionEstablecimientosEntidad_Service();
        // Instancia de la operación consultar establecimientos del servicio
        // de rues OSB
        GestionEstablecimientosEntidad port = service.getGestionEstablecimientosEntidadPort();
        // Establecimientos DTO
        ReEstablecimientoDTO reEstablecimientoDTO = new ReEstablecimientoDTO();
        // Request necesario para hacer la búsqueda de establecimientos
        BusquedaEstablecimientoEntrada part = new BusquedaEstablecimientoEntrada();
        IdentificacionPersonal identificacion = new IdentificacionPersonal();
        identificacion.setNumeroDocumento(numeroIdentificacion);
        // Se guarda el número de idenfiticación a buscar
        part.setParametrosBusqueda(identificacion);
        // Se consultan los establecimientos
        BusquedaEstablecimientoSalida resultadoEstablecimientos = port.consultarEstablecimientosARegistrar(part);
        // Si encuentra establecimientos
        if (resultadoEstablecimientos != null) {
            logger.info("Encontré datos");

我希望这证明有用。

答案 2 :(得分:0)

import pandas as pd

reader = pd.read_csv('file.csv',sep=',')
writer = reader[reader['Packets_Type']=='ICMP_tt']
writer.to_csv('newfile.csv', index=False)import pandas as pd

添加sep =','应该可以解决错误