简体   繁体   English

重新编码一个命名的元组

[英]Re-encode a named tuple

Input: 输入:

import mouse
import pickle
from collections import namedtuple

#https://github.com/boppreh/keyboard/blob/master/keyboard/mouse.py

#from ._mouse_event import ButtonEvent, MoveEvent, WheelEvent, LEFT, RIGHT, 
MIDDLE, X, X2, UP, DOWN, DOUBLE


ButtonEvent = namedtuple('ButtonEvent', ['event_type', 'button', 'time'])
WheelEvent = namedtuple('WheelEvent', ['delta', 'time'])
MoveEvent = namedtuple('MoveEvent', ['x', 'y', 'time'])

with open ('outfile', 'rb') as fp:
    itemlist = pickle.load(fp)

#print (type (itemlist))
print (itemlist[:3])

z=0
xx=50
yy=10
itemlist2=[]

for i in itemlist:
    old_event = itemlist[z]
    new_event = MoveEvent(x=xx, y=yy, time=old_event.time)
    itemlist2.append(new_event)
    z=z+1
    xx=xx+1
    yy=yy+1
print ()

print (itemlist2[:3])

print (type (itemlist))
print (type (itemlist[0]))
print (type (itemlist[0][0]))

print()

print (type (itemlist2))
print (type (itemlist2[0]))
print (type (itemlist2[0][0]))

Output: 输出:

[MoveEvent(x=1369, y=162, time=1504533266.029788), MoveEvent(x=1358, y=165, time=1504533266.0377884), MoveEvent(x=1350, y=167, time=1504533266.045789)]

[MoveEvent(x=50, y=10, time=1504533266.029788), MoveEvent(x=51, y=11, time=1504533266.0377884), MoveEvent(x=52, y=12, time=1504533266.045789)]
<class 'list'>
<class 'mouse._mouse_event.MoveEvent'>
<class 'int'>

<class 'list'>
<class '__main__.MoveEvent'>
<class 'int'>

New to python here- When I re-assemble the list of named tuples into itemlist2 I need the keep the -class mouse._mouse_event.MoveEvent - - not sure how to do this python的新功能-当我将命名元组的列表重新组合到itemlist2我需要保留-class mouse._mouse_event.MoveEvent不确定如何执行此操作

I guess I could also try and edit ' itemlist ' directly if that is possible 我想我也可以尝试直接编辑“ itemlist

when printed the lists look identical (except for the changed values) 打印时,列表看起来相同(更改后的值除外)

You're creating a new MoveEvent namedtuple type in your file: 您正在文件中创建一个新的MoveEvent namedtuple类型:

MoveEvent = namedtuple('MoveEvent', ['x', 'y', 'time'])

If you want to use the original, you need to use mouse._mouse_event.MoveEvent or rename it above: 如果要使用原始版本,则需要使用mouse._mouse_event.MoveEvent或在上面重命名:

MoveEvent = mouse._mouse_event.MoveEvent

Because mouse.py includes this line: 由于mouse.py包含以下行:

from ._mouse_event import ButtonEvent, MoveEvent, WheelEvent, LEFT, RIGHT, MIDDLE, X, X2, UP, DOWN, DOUBLE

You can probably use this code: 您可能可以使用以下代码:

import mouse
from mouse import MoveEvent

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM