避免python输出中的换行符

时间:2015-11-05 14:35:03

标签: python csv merge compare

下面的代码片段比较两个csv文件并合并它们。我的问题是第二个文件是用新行打印的。

<span class="@ViewData["class"]">@ViewData.TemplateInfo.FormattedModelValue</span>

提交a:

import csv
import dateutil.parser

with open('a.csv', 'r') as f1:
   feed = f1.readlines()

with open ('b.csv', 'r') as f2:
    for line in f2.readlines()[1:]:
      line = line.split(',')
      ts = dateutil.parser.parse(line[3])
      print(ts)
      for i, log in enumerate(feed):
        ls = log.split(',')
        ts_start = dateutil.parser.parse(ls[0])
        ts_end   = dateutil.parser.parse(ls[1])
        if (ts >= ts_start) and (ts < ts_end):
           print(ts, ts_start, ts_end)
           name, tags, mean = line[0], ','.join(line[1:3]),line[-1]
           feed[i] = ','.join([log, name, tags, mean])

with open('c.csv', 'w') as f:
 f.writelines(feed)

文件b:

2015-11-04T13:35:18.657Z,2015-11-04T13:47:06.588Z,load,INSERT
2015-11-04T13:47:47.164Z,2015-11-04T14:07:13.230Z,run,READUPDATE

输出:

name,tags,time,mean
memory_value,"type=memory,instance=buffered",2015-11-04T13:35:00Z,
memory_value,"type=memory,instance=buffered",2015-11-04T13:45:00Z,1.32    
memory_value,"type=memory,instance=buffered",2015-11-04T14:05:00Z,1.11

预期产出:

A1,A2,A3,A4,
A5
B1,B2,B3,B4,
B5,

我怎样才能实现这个目标?

由于

2 个答案:

答案 0 :(得分:1)

readlines返回的列表中的字符串包括每行末尾的换行符,因此在对该数据执行字符串操作时可能会无意中包含这些字符串。特别是,','.join([log, name, tags, mean])logname之间会有换行符,因为log最终来自f1.readlines()

尝试从每行中删除换行符之前。

  for i, log in enumerate(feed):
    log = log.strip()
    ls = log.split(',')

可能还需要在第一个for循环的顶部执行line = line.strip().split(','),而不仅仅是line = line.split(',')。没有它,我的机器上的输出看起来没问题,但我不能100%确定它与您想要的输出完全匹配。

答案 1 :(得分:0)

根据您使用的python版本,您可能需要更改&#39; r&#39;和&#39; w&#39;到了&#39; rb&#39;和&#39; wb&#39;以二进制模式读写文件。这应该有助于新线。