因此,我对程序有这种邪恶的憎恶:
print((lambda raw, name_file: ((lambda start_time, total, lines, names: ((lambda parsed: ('\n'.join(str(10*(parsed[0][name]+parsed[1][name]/2)/total).ljust(6) + name for name in names)))(list(map(lambda x: __import__("collections").Counter(x), map(lambda x: list(map(lambda x: x[1], x)), [list(group[1]) for group in __import__("itertools").groupby(sorted([list(group[1])[0] for group in __import__("itertools").groupby(sorted(list(map(lambda x: [x[3], ' '.join([x[4], x[5], x[6]]), __import__("datetime").datetime.strptime(x[0] + ' ' + x[1], '%Y.%m.%d %H:%M:%S')], map(str.split, filter(lambda x: (any(name.strip() in x for name in names) and "OK ( 0 )" in x), lines))))), lambda x: (x[0], x[1]))], key = lambda x: (x[2], x[1], x[0])), lambda x: ((x[2] < start_time+__import__("datetime").timedelta(days=7)) + (x[2] < start_time+__import__("datetime").timedelta(days=14))))]))))))(__import__("datetime").datetime.strptime(raw.readline().strip(), '%d.%m.%Y %H:%M'), int(raw.readline()), map(lambda x: x.replace("Минчен", ""), raw.readlines()), list(map(str.strip, name_file.readlines())))))(raw = open("test.txt", "r"), name_file = open("names.txt", "r")))
(在pastebin上可能更好)
它几乎可以工作,但是不起作用的方式很奇怪,对我来说似乎是一个解释器错误。
现在,代码中唯一的非ASCII字符最后出现在字符串“Минчен”中,即使这样它们也完全兼容UTF-8,这应该是默认编码。现在,问题是,Python抛出此错误:
Non-UTF-8 code starting with '\xd1' in file lulz.py on line 1, but no encoding declared;
这不仅仅是一些奇怪的编码问题!如果删除字符串中的最后一个“н”,程序运行正常;当我在该位置添加任何俄语字母时,解释器崩溃。即使我仅在该位置之前的任何位置添加一个换行符,以使该字符串位于源代码的第二行,解释器也不会崩溃。
当然,考虑到这是多么的挑剔和不稳定,我无法提供一个最小的示例,但是我很确定这不是预期的行为。这是解释器中的错误,还是我做错了什么?
顺便说一句,它可能需要“ names.txt”和“ test.txt”出现;如果要测试,可以使用这些名称创建两个空文件。
UPD即使在任何单个
(
之后添加空格也可以使一切正常!这里肯定有问题。UPD2我正在使用Python 3.5.1
>>> python3 --versionPython 3.5.1
UPD3这是我的file.
UPD4,这是一个十六进制转储:http://pastebin.com/5R1rbtc3
UPD5显然只能在Mac上重现此问题。我觉得不希望在不同平台上有不同的行为。
最佳答案
该错误是您对默认源文件编码的期望。
当您使用Python 3.x时,它只是UTF-8(我检查过,3.5解析了可恶性,没有问题)
Python 2.x默认为ASCII,因此在此可憎之处添加一个编码注释作为第一行,您很高兴
# -*- coding: utf8 -*-