NameError:name'`Timevalue`'没有定义

时间:2017-12-05 09:20:09

标签: python python-3.x csv dictionary elasticsearch

我将数据存储在csv文件中,如下所示:

row = dict_items([('Time ': '2017-12-01T13:54:04'), ('Energy [kWh]': '0.01'), ('Voltage [V]': '221.64'), ('Current [A]': '0.08')])

现在我想把它存储起来:

('Time ': '2017-12-01T13:54:04', 'Energy [kWh]': '0.01'),
('Time ': '2017-12-01T13:54:04','Voltage [V]': '221.64'), 
('Time ': '2017-12-01T13:54:04','Current [A]': '0.08')])

所以我在下面编写了这段代码并定义了

    Device=""
    Value=""
    for key, value in row.items():
        print(row.items())
        if key == 'Time':
            Timevalue = value
            print(Zeitvalue)
        Device = key
        Value = value
        doc = {'Device':Device, 'Measure':Value , 'Time':Timevalue }

我收到此错误: NameError:name' Timevalue'没有定义 如何使Timevalue变量全局变量以避免此问题? 谢谢

1 个答案:

答案 0 :(得分:0)

return map.getOrDefault…语法不是有效的Python。假设您确实想要一个字典列表,那么执行该转换并不太难。

首先需要获取时间戳,以便它可以与其他每个项目组合,然后您可以将其从dict中删除,以便更容易将剩余项目复制到新结构中。请注意,这会修改传递给函数的原始字典。如果您不想这样,您可以复制传入的字典,或者在循环中放置('Time ': '2017-12-01T13:54:04', 'Energy [kWh]': '0.01')测试,将数据复制到新结构中,以便跳过时间项。

if

<强>输出

def convert(old):
    time_key = 'Time '
    # Save the time
    time_item = (time_key, old[time_key])
    # Add remove it
    del old[time_key]
    # Copy remaining items to new dicts and save them in a list
    return [dict([time_item, item]) for item in old.items()]

row = {
    'Time ': '2017-12-01T13:54:04', 
    'Energy [kWh]': '0.01', 
    'Voltage [V]': '221.64', 
    'Current [A]': '0.08',
}

new_data = convert(row)
for d in new_data:
    print(d)

如果您不想改变或复制原始字典,请执行以下操作:

{'Time ': '2017-12-01T13:54:04', 'Energy [kWh]': '0.01'}
{'Time ': '2017-12-01T13:54:04', 'Voltage [V]': '221.64'}
{'Time ': '2017-12-01T13:54:04', 'Current [A]': '0.08'}

请注意,效率较低,因为它必须测试每个密钥以确保它不是时间密钥。

要将数据保存在def convert(old): time_key = 'Time ' # Save the time time_item = (time_key, old[time_key]) # Copy other items to new dicts and save them in a list return [dict([time_item, (key, val)]) for key, val in old.items() if key != time_key] 列表中,我们需要稍微更改逻辑。我们还需要正确创建OrderedDict,以便项目按所需顺序排列。

OrderedDict

<强>输出

from collections import OrderedDict
from pprint import pprint

def convert(row):
    time_key = 'Time '
    time_value = row[time_key]
    new_data = []
    for key, val in row.items():
        if key == time_key:
            continue
        new_data.append(OrderedDict(Device=key, Measure=val, Time=time_value))
    return new_data

row = {
    'Time ': '2017-12-01T13:54:04', 'Energy [kWh]': '0.01',
    'Voltage [V]': '221.64', 'Current [A]': '0.08'
}

new_data = convert(row)
pprint(new_data)