【发布时间】:2016-02-06 10:45:41
【问题描述】:
下面的代码 sn-p 比较两个 csv 文件并将它们合并。我的问题是第二个文件以新行打印。
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)
文件:
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
文件 b:
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,
预期输出:
A1,A2,A3,A4,A5
B1,B2,B3,B4,B5
我怎样才能做到这一点?
谢谢
【问题讨论】:
-
“输出”是指“c.csv 的内容”还是“打印到标准输出的内容”?
-
您能提供 a.csv 和 b.csv 的样本副本吗?
-
请在问题中提供文件作为代码块,而不是作为外部链接。
-
您正在导入
csv模块,但实际上并没有在代码中使用它。您可能想要这样做,因为它可以确保您在输出中获得正确的换行符。但是请注意,它确实对如何打开文件有一些要求(您需要在 Python 2 中以二进制模式打开,或在 Python 3 中使用newline="")。 -
一些题外话:永远不要使用
for line in file.readlines(),而是使用for line in file。同样,您也可以在 for 循环中逐行编写 (f.write('%s\n' % feed))。这样您就不会将所有数据加载到内存中,并且会摆脱尾随的\n。