如何重新格式化大型 csv 文件,每 9 个分隔符添加一个换行符

问题描述 投票:0回答:2

我有一个很大的 csv 文件,其中包含由“;”分隔的数据存储在一个巨大的行中。

用分号分隔的前 9 个字段是整个集合的列名称。

使用 Python,我如何重新格式化此 csv 文件,重写它并每 9 个字段添加一个换行符,以便在 Excel 或 Calc 中正确导入?

我应该导入 csv 还是 pandas?

提前非常感谢。

python csv
2个回答
1
投票

这是一个可以完成这项工作的快速正则表达式技巧。这假设值中没有带引号的分号:

import re

csv = "a;b;c;d;e;f;g;h;i;1;2;3;4;5;6;7;8;9;1;2;3;4;5;6;7;8;9;"
wrapped = re.sub(r"((?:[^;]*;){9})", r"\1\n", csv)

print(wrapped)

输出:

a;b;c;d;e;f;g;h;i;
1;2;3;4;5;6;7;8;9;
1;2;3;4;5;6;7;8;9;

0
投票

如果您的 CSV 字段包含带引号的分号,则使用 [

csv]
模块解析器的此版本可以处理它:

in.csv:

col1;col2;col3;col4;col5;col6;col7;col8;col9;1;2;3;4;5;6;7;8;9;"a;a";"b;b";"c;c";"d;d";"e;e";"f;f";"g;g";"h;h";"i;i"

代码:

import csv

with open('in.csv', newline='') as file:
    reader = csv.reader(file, delimiter=';')
    line = next(reader)  # reads the first (and assumed only) line

if len(line) % 9 != 0:
    raise ValueError('line items not a multiple of 9')

with open('out.csv', 'w', newline='') as file:
    writer = csv.writer(file, delimiter=';')
    # slice 9 items at a time and output to file
    for i in range(0, len(line), 9):
        writer.writerow(line[i:i+9])

输出.csv:

col1;col2;col3;col4;col5;col6;col7;col8;col9
1;2;3;4;5;6;7;8;9
"a;a";"b;b";"c;c";"d;d";"e;e";"f;f";"g;g";"h;h";"i;i"
© www.soinside.com 2019 - 2024. All rights reserved.