我有以下问题。我想保存一个列表到csv(在第一列)。见这里的例子:
import csv
mylist = ["Hallo", "der Pixer", "Glas", "Telefon", "Der Kühlschrank brach kaputt."]
def list_na_csv(file, mylist):
with open(file, "w", newline="") as csv_file:
csv_writer = csv.writer(csv_file)
csv_writer.writerows(mylist)
list_na_csv("example.csv", mylist)
我在excel中的输出如下所示:
所需输出为:
你可以看到我有两个问题:首先,每个字符后面都跟有逗号。其次,我不知道如何使用一些编码,例如UTF-8或cp 1250。请问我该如何修正?
我试着搜索类似的问题,但没有为我工作。谢谢。
5条答案
按热度按时间wlwcrazw1#
你有两个问题。
writerows
需要一个行列表,也就是可迭代列表。因为字符串是可迭代的,所以每个单词都写在不同的行中,每个字段一个字符。如果你想要一行中每个字段一个单词,你应该使用writerow
1.默认情况下,csv模块使用逗号作为分隔符(这是最常见的一种)。2但是Excel使用它是一件麻烦事:它要求分隔符为区域设置的分隔符,在许多西欧国家(包括德国),区域设置为分号(
;
)。如果您希望在 your Excel中轻松使用文件,则应更改分隔符:编辑完成后,您希望所有数据都在第一列,每行一个元素。这是一种过时的csv文件,因为每条记录只有一个值,而且没有分隔符。如果字段中不能包含分号或换行符,您可以编写一个纯文本文件:
如果您希望以后处理更多的 * 极端情况 * 值时能够安全地避免出现问题,您仍然可以使用csv模块,并通过将每行包含在另一个可迭代对象中来写入一个元素:
uyhoqukh2#
对于不那么琐碎的例子:
这里你基本上设置了每个列表元素之间的引号,以防止从内部字段逗号的问题。
g52tjvyc3#
试试这个,它会100%起作用
mznpcxlj4#
如果要将整个字符串列表写入一行,请使用注解中提到的
csv_writer.writerow(mylist)
。如果你想把每个字符串写入一个新的行,正如我相信你在第一列中提到的那样,你必须按照类的要求格式化你的数据:“对于Writer对象,行必须是字符串或数字的可迭代对象”。在此数据上,将类似于:
在这里,我使用一个生成器表达式将每个单词 Package 在一个元组中,从而使它成为一个字符串的可迭代对象。如果没有这样的东西,你的字符串本身就是可迭代的,并导致它在每个字符之间划界,正如你所看到的。
使用csv在每一行中写入一个条目几乎是毫无意义的,但是它确实有一个好处,如果它出现在数据中,它将转义您的分隔符。
要指定编码,文档会说:
由于open()用于打开一个CSV文件进行阅读,因此默认情况下,该文件将使用系统默认编码解码为unicode(请参阅locale.getpreferredencoding())。要使用其他编码解码文件,请使用open的encoding参数:
这同样适用于使用系统默认编码以外的其他编码进行写入:请在打开输出文件时指定编码参数。
doinxwow5#
尝试拆分(“\n”)示例: