python数据处理,每个lin中的字段不匹配

2024-05-04 21:29:51 发布

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

我对python和代码还不熟悉。我有下面这样的大数据,并希望保存在csv文件与字段作为标题。所有字段以“,”分隔,每个参数的右侧都有值 例如,对于LAIGCINAME="LocalLA"LAIGCINAME是字段,"LocalLA"是值。我的问题是所有行都缺少一些字段。有没有人能帮我在python中处理这个问题,因为数据不同步

ZXWN:GCI="12345",LAIGCINAME="LocalLA",PROXYLAI=NO,MSCN="11223344",VLRN="11223344",MSAREANAME="0"
ZWGA:GCI="13DADC12",PROXYLAI=NO,MSCVLRTYPE=MSCVLRNUM,MSCN="33223344",VLRN="22334455",MSAREANAME="0",NONBCLAI=NO;

Tags: 文件csv数据no代码标题参数gci
1条回答
网友
1楼 · 发布于 2024-05-04 21:29:51

由于您的数据有许多可能的列名,因此需要首先解析整个文件以确定合适的列名列表。完成此操作后,可以写入输出文件的头,后跟所有数据

通过使用csv.DictWriter()对象,丢失的条目将作为空单元格写入。如果缺少值需要另一个值,例如“N/A”,则可以添加restval参数

import csv

header = set()
input_filename = 'input.csv'
output_filename = 'output.csv'

with open(input_filename, newline='') as f_input:
    csv_input = csv.reader(f_input)

    # First determine all possible column names
    for row in csv_input:
        header.update({entry.split('=')[0] for entry in row})

with open(input_filename, newline='') as f_input, open(output_filename, 'w', newline='') as f_output:
    csv_input = csv.reader(f_input)
    csv_output = csv.DictWriter(f_output, fieldnames=sorted(header))
    csv_output.writeheader()

    for row in csv_input:
        output_row = {}

        for entry in row:
            key, value = entry.split('=')
            output_row[key] = value.strip('"')

        csv_output.writerow(output_row)

对于给定的两行,这将为您提供如下输出文件:

LAIGCINAME,MSAREANAME,MSCN,MSCVLRTYPE,NONBCLAI,PROXYLAI,VLRN,ZWGA:GCI,ZXWN:GCI
LocalLA,0,11223344,,,NO,11223344,,12345
,0,33223344,MSCVLRNUM,NO;,NO,22334455,13DADC12,

csv.dictwriter通过从字典中写一行来工作,csv.writer通过获取项目列表来工作

代码为每一行创建一个名为output_row的字典,然后将其写入输出文件。通过一次处理一行,脚本将能够处理任何大小的文件,而不会出现内存问题


另一种方法是将整个文件读入内存,并创建一个字典列表,每行一个。可以同时计算header值。这一系列的词典可以一次完成

例如:

import csv

input_filename = 'input.csv'
output_filename = 'output.csv'

header = set()  # Use a set to create unique header values from all rows
output_rows = []    # list of dictionary rows

with open(input_filename, newline='') as f_input:
    csv_input = csv.reader(f_input)

    for row in csv_input:
        output_row = {}

        for entry in row:
            key, value = entry.split('=')
            output_row[key] = value.strip('"')
            header.add(key)

        output_rows.append(output_row)

with open(output_filename, 'w', newline='') as f_output:        
    csv_output = csv.DictWriter(f_output, fieldnames=sorted(header))
    csv_output.writeheader()
    csv_output.writerows(output_rows)

注意,如果文件太大(您的问题提到您有大数据),这种方法将失败

相关问题 更多 >