我正在写一个scipt(即从前),在这里我从excel文件中读取数据。对于这些数据,我根据日期和时间创建了一个id。我缺少一个变量,它包含在一个txt文件中。txt文件还包含创建id的日期和时间
现在我想根据id链接excel文件和txt文件中的数据。不,我正在用txt文件建立两个列表。一个包含id,另一个包含我需要的值。然后,我从id列表中获取索引,其中id在使用枚举函数的两个数据集中是相同的。我使用该索引从valuelist中获取值。代码如下所示:
datelist = []
valuelist = []
txtfile = open(folder + os.sep + "Textfile.txt", "r")
ILines = txtfile.readlines()
for i,row in enumerate(ILines):
datelist.append(row.split(",")[1])
valuelist.append(row.split(",")[2])
rows = myexceldata
for row in rows:
x = row[id]
row = row + valuelist[[i for i,e in enumerate(datelist ) if e == x][0]]
然而,这需要很长时间,我想知道是否有更好的方法。你知道吗
文件如下所示:
Excel文件:
Date Time Var1 Var2
03.02.2016 12:53:24 10 27
03.02.2016 12:53:25 10 27
03.02.2016 12:53:26 10 27
文本文件:
Date Time Var3
03.02.2016 12:53:24 16
03.02.2016 12:53:25 20
结果:
Date Time Var1 Var2 Var3
03.02.2016 12:53:24 10 27 16
03.02.2016 12:53:25 10 27 20
03.02.2016 12:53:26 10 27 *)
*)如果这里的值与上面的值相同,那就太好了,但是空的也可以
好吧,我忘了一件重要的事。抱歉:不是所有的excelfile时间都在textfile中。最好的选择是从textfile的前一个时间在excelfile的时间之前获取var3。但也可以选择将其留空。你知道吗
如果两个文件都是按时间顺序排序的,那么下面的方法会很快:
这假设您的两个输入文件都是csv格式,并按如下方式工作:
为所有文件创建csv读写器。这允许文件作为列列表自动读入,而不需要拆分每一行。
从两个文件中提取头文件,并向输出中写入一个组合表单。
获取两个输入文件并将它们传递给
merge
。这将按顺序从任一输入文件中一次返回一行。将此消息传递给
groupby
,将具有相同日期和时间的行分组在一起。这将返回一个键和一个组,其中键是匹配的日期和时间,组是匹配行的一个iterable。对于每个分组条目,将键和列2从每行开始写入输出文件。
chain
用于生成平面列表。这将为您提供如下输出文件:
因为您已经有了excel数据,所以需要传递它来合并,而不是作为行/列的列表
csv_excel
。你知道吗相关问题 更多 >
编程相关推荐