繁体   English   中英

使用csv modul将列表元素写入python中的csv文件中的字段

[英]Write list elements to fields in a csv-file in python using the csv modul

我得到了一个文本文件BM.txt ,内容看起来像这样:

*A0 0194 7F9E 00 0001 B7AB A0 0194 7F9E 00 0001 B7BE A0 0194 7F9E 00 0001  B7CD A0 0194 7F9E 00 0001 B7D4*

在我的代码中:我想用26个字符分隔元素。 26个字符的每个元素都是列表中的一个元素:

import csv #import csv modul using writerows function 
#csv docs https://docs.python.org/3/library/csv.html

#open the file with the string element to seperate bm elements.
    file = open("BM.txt", "r")
    c = file.read()
#list comp that seperates the elements by 26 charackters each
    neue_liste = [c[i:i+26] for i in range(0, len(c), 26)] 

#creating a new file with the bm elements as comma seperated values
    with open('briefmarken.csv', 'w', newline='') as f:
        writer = csv.writer(f)
        writer.writerows(neue_liste)
    file.close()

列表理解的结果看起来很有希望:

['A0 0194 7F9E 00 0001 B7AB ', 'A0 0194 7F9E 00 0001 B7BE ', 'A0 0194 7F9E 00 0001 B7CD ',.....]

但是,当我最终用writerow()函数编写列表时。 csv中的内容如下所示:

A,0, ,0,1,9,4, ,7,F,9,E, ,0,0, ,0,0,0,1, ,B,7,A,B, 
A,0, ,0,1,9,4, ,7,F,9,E, ,0,0, ,0,0,0,1, ,B,7,B,E, 
A,0, ,0,1,9,4, ,7,F,9,E, ,0,0, ,0,0,0,1, ,B,7,C,D, 
....

确实这对我的工作已经足够了,但是我想知道为什么现在每个字符都用逗号分隔吗? 和IAM看的帖子和CSV文档,但我不明白。

也许有人可以回答这个问题。

提前致谢

您正在使用csv.writerows编写字符串列表,该列表将写入行。

此函数接受可迭代的可迭代对象。 因此,当传递字符串列表时,您会满足输入要求,但并不是您所期望的那样:字符串被视为可迭代的,并且逐字符拆分。

要写入所有数据(每行1个字符串),请使用:

writer.writerows([x] for x in neue_liste)

(嗯, csv模块在这种情况下几乎没有用,最好在文件句柄上使用writelines

要将所有数据写到1行中,请使用writerow (请注意最后缺少s ):

writer.writerow(neue_liste)

尽管注释明智地建议您要根据空格再次分割字符串,然后使用:

writer.writerows(x.split() for x in neue_liste)

要么

writer.writerows(map(str.split,neue_liste))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM