【发布时间】:2019-01-22 21:22:14
【问题描述】:
我正在尝试更改 CSV 上的分隔符并写入新文件,这只是一个简单的修改,但不是。
#!/usr/bin/python
#-*- econde: utf-8 -*-
import sys
import csv
def main():
r = open(sys.argv[1],"r")
wr = open(sys.argv[2],"a+")
rea = csv.reader(r, delimiter=',')
writer = csv.writer(wr,delimiter="|", quotechar="'")
for row in rea:
#line = str(row).replace(",","|")
#writer.writerow("".join(line))
writer.writerow(row)
print type(row)
print row
r.close()
wr.close()
if __name__ == '__main__':
main()
更新:
控制台的输出看起来很像:
./csv_read.py fim.csv salida.csv
<type 'list'>
['9/17/18 22:29', 'any', 'la_cuerda.net', 'Sep 17 22:29:29 running yum[37144]: Installed: ImageMagic-toolkit-2.1.7-1.noarch']
但在文件中写入了 3 次相同的字符串,但以三种不同的方式
第一种方式还是一样:每个字段1个字符(包括错误的格式和括号)
第二种方法是在一个单元格中插入所有内容,而不像原来那样拆分它
这是输入文件和输出文件的内容
$ cat Input.csv
Time(GMT),Host,dest,Alert
9/17/18 22:34,any,google.com.mx,monitor: Agent started: 'discovery.channel.org->any'.
9/17/18 22:29,any,la_cuerda.net,Sep 17 22:29:29 running yum[37144]: Installed: ImageMagic-toolkit-2.1.7-1.noarch
$ cat Output.csv
[,'''',T,i,m,e,(,G,M,T,),'''',|, ,'''',H,o,s,t,'''',|, ,'''',d,e,s,t,'''',|, ,'-''',A,l,e,r,t,'''',]
[,'''',9,/,1,7,/,1,8, ,2,2,:,3,4,'''',|, ,'''',a,n,y,'''',|, ,'''',g,o,o,g,l,e,.,c,o,m,.,m,x,'''',|, ,",m,o,n,i,t,o,r,:, ,A,g,e,n,t, ,s,t,a,r,t,e,d,:, ,'''',d,i,s,c,o,v,e,r,y,.,c,h,a,n,n,e,l,.,o,r,g,-,>,a,n,y,'''',.,",]
[,'''',9,/,1,7,/,1,8, ,2,2,:,2,9,'''',|, ,'''',a,n,y,'''',|, ,'''',l,a,_,c,u,e,r,d,a,.,n,e,t,'''',|, ,'''',S,e,p, ,1,7, ,2,2,:,2,9,:,2,9, ,r,u,n,n,i,n,g, ,y,u,m,[,3,7,1,4,4,],:, ,I,n,s,t,a,l,l,e,d,:, ,I,m,a,g,e,M,a,g,i,c,-,t,o,o,l,k,i,t,-,2,.,1,.,7,-,1,.,n,o,a,r,c,h,'''',]
Time(GMT)|Host|dest|Alert
9/17/18 22:34|any|google.com.mx|'monitor: Agent started: ''discovery.channel.org->any''.'
9/17/18 22:29|any|la_cuerda.net|Sep 17 22:29:29 running yum[37144]: Installed: ImageMagic-toolkit-2.1.7-1.noarch
Time(GMT)|Host|dest|Alert
9/17/18 22:34|any|google.com.mx|'monitor: Agent started: ''discovery.channel.org->any''.'
9/17/18 22:29|any|la_cuerda.net|Sep 17 22:29:29 running yum[37144]: Installed: ImageMagic-toolkit-2.1.7-1.noarch
Time(GMT)|Host|dest|Alert
9/17/18 22:34|any|google.com.mx|'monitor: Agent started: ''discovery.channel.org->any''.'
9/17/18 22:29|any|la_cuerda.net|Sep 17 22:29:29 running yum[37144]: Installed: ImageMagic-toolkit-2.1.7-1.noarch
【问题讨论】:
-
有趣的问题,首先,程序正在执行您编写的代码,这可能并不总是与您想要或期望它执行的操作一致。让我们开始分解它。当你在循环中打印
row时你看到了什么? -
如果您阅读 csv 的文档,您将看到您可以通过不执行更多
writer = csv.writer(wr,delimiter=‘*’,quotechar=“‘“)来为 writer 指定分隔符,因此绝对不需要修改line或””.join(line).另请阅读文档。并查看示例。然后编写示例代码并查看它们是否有效。然后逐步将它们扩展到您想要做的事情。 -
@ahed87 感谢您的回答,但控制台中的输出看起来不错 ['9/17/18 22:29'| '任何'| 'la_cuerda.net'| 'Sep 17 22:29:29 running yum[37144]: Installed: ImageMagic-toolkit-2.1.7-1.noarch'] 但仍将括号和引号以及每个字符作为每个字段单独插入
-
@barny 谢谢你的回答,我会试试你提到的好的我运行它,但现在写了 9 行,原来有 3 行,我不知道如何上传图片给你看文件上的输出,因为在控制台中看起来很好
['9/17/18 22:29', 'any', 'la_cuerda.net', 'Sep 17 22:29:29 running yum[37144 ]:已安装:ImageMagic-toolkit-2.1.7-1.noarch'] rea = csv.reader(r, delimiter=',') writer = csv.writer(wr,delimiter="|", quotechar="'" ) for row in rea: writer.writerow(row) print type(row) print row -
编辑您的问题,显示您当前的代码及其输出,以及输入文件的一些行。