[英]Python csv write a list to file
我正在编写一个脚本来将一个带有制表符分隔的列表写入 csv 文件,如下所示。 但我没有得到正确的输出。
out_l = ['host\tuptime\tnfsserver\tnfs status\n', 'node1\t2\tnfs_host\tok\n', 'node2\t100\tnfs_host\tna\n', 'node3\t59\tnfs_host\tok\n']
代码:
out_f = open('test.csv', 'w')
w = csv.writer(out_f)
for l in out_l:
w.writerow(l)
out_f.close()
输出 csv 文件如下所示。
h,o,s,t, ,s,s,h, , , , , ,s,u,d,o,_,h,o,s,t, , , , , , , ,n,f,s,"
"1,9,2,.,1,6,8,.,1,2,2,.,2,0,1, ,o,k, ,n,f,s,h,o,s,t, ,o,k,"
"1,9,2,.,1,6,8,.,1,2,2,.,2,0,2, ,f,a,i,l,e,d, ,n,a, ,n,a,"
"1,9,2,.,1,6,8,.,1,2,2,.,2,0,3, ,o,k, ,n,f,s,h,o,s,t, ,s,h,o,w,m,o,u,n,t, ,f,a,i,l,e,d,"
”
我还检查了 csv.writer 选项,如分隔符、方言 = excel,但没有运气。 有人可以帮助格式化输出吗?
使用out_l
的格式,您可以将其写入文件:
out_l = ['host\tuptime\tnfsserver\tnfs status\n', 'node1\t2\tnfs_host\tok\n', 'node2\t100\tnfs_host\tna\n', 'node3\t59\tnfs_host\tok\n']
with open('test.csv', 'w') as out_f:
for l in out_l:
out_f.write(l)
要正确使用csv
, out_l
应该只是列的列表,并让csv
模块使用制表符和换行符进行格式化:
import csv
out_l = [['host','uptime','nfsserver','nfs status'],
['node1','2','nfs_host','ok'],
['node2','100','nfs_host','na'],
['node3','59','nfs_host','ok']]
#with open('test.csv', 'wb') as out_f: # Python 2
with open('test.csv', 'w', newline='') as out_f: # Python 3
w = csv.writer(out_f, delimiter='\t') # override for tab delimiter
w.writerows(out_l) # writerows (plural) doesn't need for loop
注意with
会自动关闭文件。
请参阅csv 文档,了解打开文件以与csv.reader
或csv.writer
一起使用的正确方法。
csv.Writer.writerow
方法接受一个 iterable 并将所说的 iterable 产生的值写入由指定分隔符分隔的 csv 字段:
out_f = open('test.csv', 'w')
w = csv.writer(out_f, delimiter='\t') # set tab as delimiter
for l in out_l: # l is string (iterable of chars!)
w.writerow(l.split('\t')) # split to get the correct tokens
out_f.close()
由于列表中的字符串已经包含必要的选项卡,您可以将它们直接写入文件,不需要 csv 工具。 如果您手动构建/加入了out_l
的字符串, out_l
可以省略该步骤,只需将原始数据结构传递给writerow
。
delimiter
参数 delimiter
参数控制输出中的分隔符。 它与输入out_l
。
csv.writer.writerow
迭代输入。 在您的情况下,您给它一个字符串( host\\tuptime\\tnfsserver\\tnfs status\\n'
等),因此该函数会迭代该字符串,为您提供一系列字符。
使用str.split()
提供字段列表而不是完整字符串。 在您的情况下,字符串以\\n
结尾,因此也请使用str.strip()
:
import csv
out_l = ['host\tuptime\tnfsserver\tnfs status\n',
'node1\t2\tnfs_host\tok\n',
'node2\t100\tnfs_host\tna\n',
'node3\t59\tnfs_host\tok\n']
out_f = open('test.csv', 'w')
w = csv.writer(out_f)
for l in out_l:
w.writerow(l.strip().split('\t'))
out_f.close()
这应该是你想要的:
host,uptime,nfsserver,nfs status
node1,2,nfs_host,ok
node2,100,nfs_host,na
node3,59,nfs_host,ok
很简单:
with open("test.csv" , 'w') as csv_file:
writer = csv.writer(csv_file, delemeter='\t')
for item in out_l:
writer.writerow([item,])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.