在python中使用csv.reader时如何使用多个分隔符?

时间:2012-03-16 22:59:46

标签: python csv

我在文本文件中有多行文本,看起来与此类似:

2012-03-16 13:47:30.465 -0400   START  Running    Lab.script    19    on_the

我希望能够将此文本文件转换为csv。我已经使用此代码完成了这项工作:

fin = csv.reader(open('LogFile.txt', 'rb'), delimiter='\t')
fout = open('newLogFile.csv', 'w')
for row in fin:
   fout.write(','.join(row) + '\n')

但是现在,我的问题是我需要能够在行的这一部分的空格后添加“,”:

2012-03-16 13:47:30.465 -0400 

我不知道怎么做,我尝试使用split()来拆分当前的行/位置,但它不起作用。任何建议都会非常有用。

谢谢

2 个答案:

答案 0 :(得分:4)

有帮助的是,只是从一开始就标签分隔所有内容?如果是这样,您可以参考此answer,基本上是

  

这个用例确实有一个特例快捷方式!

     

如果你在没有参数的情况下调用str.split,它会在运行时分割   空格而不是单个字符。所以:

>>> ' '.join("Please \n don't \t hurt \x0b me.".split()) 
"Please don't hurt me."

所以对你来说就是

newLogFile = open('newLogFile.csv', 'w')
textFile = open('LogFile.txt', 'rb')
for row in textFile:
    newLogFile.write('\t'.join(row.split()))

你也说过

  

但是现在,我的问题是我需要能够在之后添加“,”   这一部分的空格:

     

2012-03-16 13:47:30.465 -0400

对我来说听起来像你想要的

2012-03-16 ,13:47:30.465 ,-0400

答案 1 :(得分:2)

尝试以下方法:

fin = csv.reader(open('LogFile.txt', 'rb'), delimiter='\t')
fout = open('newLogFile.csv', 'w')
for row in fin:
   row[0] = ','.join(row[0].split())
   fout.write(','.join(row) + '\n')

csv.reader()

读入后,这将显示如下所示的行
['2012-03-16 13:47:30.465 -0400', 'START', 'Running', 'Lab.script', '19 ', 'on_the']

然后更改第一个元素,使其看起来像这样:

['2012-03-16,13:47:30.465,-0400', 'START', 'Running', 'Lab.script', '19 ', 'on_the']

在行上','.join()之后,您将获得将写入输出文件的行:

'2012-03-16,13:47:30.465,-0400,START,Running,Lab.script,19,on_the'

如果其他元素中可能包含空格,并且您希望将它们全部视为输出csv中的分隔符,则可以执行以下操作:

fin = csv.reader(open('LogFile.txt', 'rb'), delimiter='\t')
fout = open('newLogFile.csv', 'w')
for row in fin:
   fout.write(','.join(','.join(item.split()) for item in row) + '\n')