下面的代码片段比较两个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,
我怎样才能实现这个目标?
由于
答案 0 :(得分:1)
readlines
返回的列表中的字符串包括每行末尾的换行符,因此在对该数据执行字符串操作时可能会无意中包含这些字符串。特别是,','.join([log, name, tags, mean])
在log
和name
之间会有换行符,因为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;以二进制模式读写文件。这应该有助于新线。