好吧,因为标题表明我遇到的问题是正确地从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 \"不代表拉脱维亚字符"ā". …
我正在使用伟大的"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)