小编Kri*_*zne的帖子

正确地从python中的Windows-1252(cp1252)文件中读取文本

好吧,因为标题表明我遇到的问题是正确地从python中的Windows-1252编码文件中读取输入并将所述输入插入到SQLAlchemy-MySql表中.

当前系统设置:
带有"Roger访问控制系统"的Windows 7 VM,用于输出文件;
Ubuntu 12.04 LTS VM具有Windows系统的共享文件夹,因此我可以使用"Python 2.7.3"访问该文件.

现在针对实际问题,对于输入文件,我有一个"VM共享文件夹",其中包含通过Roger访问控制系统(roger.pl获取更多详细信息)在Windows 7系统上生成的文件,此文件称为" PREvents.csv"暗示它的内容,";" 分离的数据清单.

数据的示例格式:

2013-03-19;15:58:30;100;J?nis;Dumburs;1;Uznemums1;0;Ieeja;
2013-03-19;15:58:40;100;J?nis;Dumburs;1;Uznemums1;2;Izeja;
Run Code Online (Sandbox Code Playgroud)

第4个字段包含卡所有者名称,第5个字段包含所有者姓氏,第6个字段包含所有者分配的组.

问题来自于上述3个字段中的任何一个都可以包含特定于拉脱维亚语言的字符,在示例文件中,单词"Jānis"包含字母"ā",其在unicode中为257.

就像我习惯的那样,我打开文件:

try:
    f = codecs.open(file, 'rb', 'cp1252')
except IOError:
    f = codecs.open(file, 'wb', 'cp1252')
Run Code Online (Sandbox Code Playgroud)

到目前为止,一切正常 - 它打开文件,所以我继续迭代文件的每一行(这是一个连续运行脚本,所以原谅循环):

while True:
    line = f.readline()

    if not line:
        # Pause loop for 1 second
        time.sleep(1)
    else:
        # Split the line into list
        date, timed, userid, firstname, lastname, groupid, groupname, typed, pointname, empty = line.split(';')
Run Code Online (Sandbox Code Playgroud)

这就是问题开始的地方,如果我print repr(firstname)打印的话u'J\xe2nis',就我而言,不正确 - "\ xe2 \"不代表拉脱维亚字符"ā". …

python utf-8 cp1252 windows-1252 python-unicode

27
推荐指数
2
解决办法
6万
查看次数

Python evdev检测设备已拔掉

我正在使用伟大的"evdev"库来收听USB条形码阅读器输入,我需要检测设备是否突然被拔出/无响应,因为否则读取循环的python脚本会在单个线程上达到100%cpu使用率慢慢开始吃掉所有可用的内存,这会导致整个系统崩溃.

我们的想法是检测设备何时拔出并终止当前脚本,导致主管尝试重新启动它,直到设备重新插入/变为响应状态.

我用来读取输入的代码如下:

devices = map(InputDevice, list_devices())

keys = {
    2: 1,
    3: 2,
    4: 3,
    5: 4,
    6: 5,
    7: 6,
    8: 7,
    9: 8,
    10: 9,
    11: 0,
}
dev = None
for d in devices:
    if d.name == 'Symbol Technologies, Inc, 2008 Symbol Bar Code Scanner':
        print('%-20s %-32s %s' % (d.fn, d.name, d.phys))
        dev = InputDevice(d.fn)
        break

if dev is not None:
    code = []
    for event in dev.read_loop():
        if event.type == ecodes.EV_KEY:
            if event.value == 00: …
Run Code Online (Sandbox Code Playgroud)

python python-2.7 evdev

3
推荐指数
1
解决办法
2399
查看次数