我有一个很大的 csv 文件,其中包含由“;”分隔的数据存储在一个巨大的行中。
用分号分隔的前 9 个字段是整个集合的列名称。
使用 Python,我如何重新格式化此 csv 文件,重写它并每 9 个字段添加一个换行符,以便在 Excel 或 Calc 中正确导入?
我应该导入 csv 还是 pandas?
提前非常感谢。
这是一个可以完成这项工作的快速正则表达式技巧。这假设值中没有带引号的分号:
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;
如果您的 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"