如何在 python 中将单元格中的换行符添加到 csv?

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

在 Vscode 的 CSV 编辑器中它看起来像这样:


这是一个细胞

我添加换行符的代码:

lista=''
for i in value:
            lista = lista + i + '\n'
stock_bodega.append(lista)

 result = pandas.DataFrame(list(zip(stock_bodega,inv_bodega)), columns =headers)
 result.to_csv(r''+funciones.RESULTS_PATH+FILE_NAME, header=True, index=False, sep=',', mode='w')

但是如果我用文本编辑器或 excel 打开 csv,它看起来像这样:

","0
0
0
","S
S
S

Excel:

预期输出:

python excel csv export-to-csv line-breaks
1个回答
1
投票

原始 CSV 看起来像:

Col_1,Col_2
"foo
Foo
FOO","1 I
2 II
3 III"
"bar
Bar
BAR","a A
b B
c C"
"baz
Baz
BAZ","4 $
5 %
6 ^"

当被视为表格时,它看起来像:

+-------+-------+
| Col_1 | Col_2 |
+-------+-------+
| foo   | 1 I   |
| Foo   | 2 II  |
| FOO   | 3 III |
+-------+-------+
| bar   | a A   |
| Bar   | b B   |
| BAR   | c C   |
+-------+-------+
| baz   | 4 $   |
| Baz   | 5 %   |
| BAZ   | 6 ^   |
+-------+-------+

我可以在 Python 中对这些数据进行建模,例如:

my_data = [
    [ "Col_1"         , "Col_2"            ],
    [ "foo\nFoo\nFOO" , "1 I\n2 II\n3 III" ],
    [ "bar\nBar\nBAR" , "a A\nb B\nc C"    ],
    [ "baz\nBaz\nBAZ" , "4 $\n5 %\n6 ^"    ],

]

我不使用 Pandas,所以我将展示使用 csv 模块将该数据结构写入 CSV:

import csv

with open("output_rows.csv", "w", newline="") as f:
    writer = csv.writer(f)
    writer.writerows(my_data)

看到你的台词:

result = pandas.DataFrame(list(zip(stock_bodega,inv_bodega)), columns=headers)

我相信你可以轻松地将这个结构交给 Pandas,也许:

result = pandas.DataFrame(my_data[1:], columns=my_data[0])

如果我有一个值列表,这些值应该最终连接在一起作为列中的单个多行字段,例如:

col1_src = [
    ["foo", "Foo", "FOO"],
    ["bar", "Bar", "BAR"],
    ["baz", "Baz", "BAZ"],
]

然后,我会迭代这些列表并用换行符加入它们,例如:

col1_data = []
for line_values in col1_src:
    col1_data.append("\n".join(line_values))

print(col1_data)
[
    "foo\nFoo\nFOO",
    "bar\nBar\nBAR",
    "baz\nBaz\nBAZ",
]

col2_src = [
    ["1 I", "2 II", "3 III"],
    ["a A", "b B", "c C"],
    ["4 $", "5 %", "6 ^"],
]

col2_data = []
for line_values in col2_src:
    col2_data.append("\n".join(line_values))
[
    "1 I\n2 II\n3 III",
    "a A\nb B\nc C",
    "4 $\n5 %\n6 ^",
]

我可以传递给 csv.writer()(可能还有 Pandas):

with open("output_cols.csv", "w", newline="") as f:
    writer = csv.writer(f)
    writer.writerow(["Col_1", "Col_2"])
    writer.writerows(list(zip(col1_data, col2_data)))

更新

关于数据在 Excel 中看起来不正确。我没有 Excel,但这是在其他几个电子表格应用程序中查看的数据:

应用程序 图片
macOS 数字
谷歌表格
Dropbox 预览

无论如何,您可以尝试将行尾的

"\n"
更改为
"\r\n"
,尽管 CSV 规范声明两者都可以接受(因此 Excel 也应该接受)。

此外,还有这个主题,在 Excel 中导入带换行符的 CSV

© www.soinside.com 2019 - 2024. All rights reserved.