Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 合并具有不同时间戳的词典_Python - Fatal编程技术网

Python 合并具有不同时间戳的词典

Python 合并具有不同时间戳的词典,python,Python,数据1: 数据2: Time Header Header Header Header 2015-08-01 07:00 14.4 14.4 14.4 68 2015-08-01 07:01 14.4 14.4 14.4 68 2015-08-01 07:01 14.4 14.4 14.4 68 我想合并这两个文件,以便获得输出: Time

数据1:

数据2:

    Time                Header  Header  Header  Header 
    2015-08-01 07:00    14.4    14.4    14.4    68 
    2015-08-01 07:01    14.4    14.4    14.4    68
    2015-08-01 07:01    14.4    14.4    14.4    68   
我想合并这两个文件,以便获得输出:

Time        Header  Header  Header  Header  Header
07:00       34      31      37      51      72
07:02       32      31      17      56      12
如果没有时间戳的参考文件,我只需要字段中的Data1一行,因此:

    Time                Header  Header  Header  Header Header  Header  Header   Header  Header
    2015-08-01 07:00    14.4    14.4    14.4    68     34       31      37      51      72
Data2文件是一个参考文件,每15分钟有一个条目,而Data1文件每分钟有一个文件。出于打印目的,我想将参考文件添加到数据文件中。所以我想我要寻找的是如何只检查时间戳的%H:%m部分并进行合并。 我尝试了以下方法:文件夹中有更多的Data1和Data2文件,所以我做的第一件事是查找匹配(Datewise)的Data1文件和Data2文件,并将它们放在一个文件中--->然后我用它制作了一个字典

           Time                Header  Header  Header  Header Header  Header  Header    Header  Header
    2015-08-01 07:00    14.4    14.4    14.4    68     34       31      37      51      72
    2015-08-01 07:01    14.4    14.4    14.4    68    
    2015-08-01 07:02    14.4    14.4    14.4    68     32       31      17      56      12
参考文件Data2的情况相同:

for data1files in Data1_List:
with open(files) as csv_files:
    reader = csv.reader(csv_files, dialect='excel-tab')
    header_1 = next(csr_reader)
    for rows in csr_reader:
        k=rows[0]
        v=rows[1:4]
        Data1Dict[k]=v
因此,两个字典中的键都是第一行:在Data1中是
2015-08-01 07:00
,在Data2中是
07:00
。有没有一种很酷的方法来比较这两个键,以便合并右侧时间戳上参考文件中的日期

for data2files in Data2_List:
with open(data2files) as csv_files:
    csr_reader = csv.reader(csv_files, dialect='excel-tab')
    header_2 = next(csr_reader)
    for rows in csr_reader:
        k=rows[0]
        v=rows[1:5]
        Data2Dict[k]=v
是一个合并了值的字典

例如:

merge_d = {d1k: d1v+Data2Dict.get(d1k[-5:]) for d1k,d1v in Data1Dict.items()
           if d1k[-5:] in Data2Dict }
它产生

Data1Dict = {'2015-08-01 07:00': ['14.4', '14.4', '14.4', '68'],
             '2015-08-01 08:00': ['15.4', '15.4', '15.4', '69']}

Data2Dict = {'07:00': ['34', '31', '37'],
             '08:00': ['38', '38', '39']}
Data1Dict = {'2015-08-01 07:00': ['14.4', '14.4', '14.4', '68'],
             '2015-08-01 07:01': ['12.2', '12.3', '12.4', '99'],
             '2015-08-01 07:02': ['15.4', '15.4', '15.4', '69']}

Data2Dict = {'07:00': ['34', '31', '37'],
             '07:02': ['38', '38', '39']}
注意:这是一个残酷的硬编码解决方案,它假设时间具有位置和固定的表示(即总是hh:mm并且总是在同一个位置)

添加更多详细信息后编辑

如果Data2Dict中可能没有相应的时间(即Data1序列的采样频率高于Data2),那么事情就更容易了:

{'2015-08-01 07:00': ['14.4', '14.4', '14.4', '68', '34', '31', '37'],
 '2015-08-01 08:00': ['15.4', '15.4', '15.4', '69', '38', '38', '39']}
输入

merge_d = {d1k: d1v+Data2Dict.get(d1k[-5:],[]) for d1k,d1v in Data1Dict.items() }
它产生

Data1Dict = {'2015-08-01 07:00': ['14.4', '14.4', '14.4', '68'],
             '2015-08-01 08:00': ['15.4', '15.4', '15.4', '69']}

Data2Dict = {'07:00': ['34', '31', '37'],
             '08:00': ['38', '38', '39']}
Data1Dict = {'2015-08-01 07:00': ['14.4', '14.4', '14.4', '68'],
             '2015-08-01 07:01': ['12.2', '12.3', '12.4', '99'],
             '2015-08-01 07:02': ['15.4', '15.4', '15.4', '69']}

Data2Dict = {'07:00': ['34', '31', '37'],
             '07:02': ['38', '38', '39']}

header-1=next…
中出现语法错误。使用下划线
thx将其固定为下划线,效果近乎完美。我想我的问题写错了:引用文件(Data2)每15分钟才有一次数据,而Data1文件每分钟有一次数据。我需要一个
合并
,其中来自Data2的数据添加到Data1的时间戳点上,当Data1的时间戳没有Data2数据时,我仍然需要文件中在线的数据。您确定输入/输出数据反映了您的要求吗?我的解决方案满足了你的话,但不是数据…嗯。。。我试过你的编辑版本,它正是我需要的代码。我只需要在一个cvs文件中包含所有内容,这样我就可以更容易地绘制这些内容。我所需要的只是从Data2复制行,并将其复制到Data1行的末尾。由于文件太多(Data1和Data2),手动操作不起作用。您介意解释合并过程吗?如果我想合并具有相同时间的词典,我会在哪里更改日期格式?上面的词典理解非常简单:对于Data1Dict(键和值)的所有项关联Dict2Dict中元素的值,该元素的键等于当前键的最后5个字符。如果没有,则关联一个空列表(即保持当前值不变)。关于格式,我不确定我是否理解您的意思