最近有一个名单在网上传得很火,详情和原文件参见【转载】上海市全体中共党员户籍放送。
这个名单是两个xlsx文件,下载后打开,发现内容其实是SQL数据库备份还原文件(以SQL语法撰写),但是被人用Microsoft Excel当成CSV格式打开,再保存为XLSX格式的。
这种做法是有问题的,因为逗号在SQL中并不只是作参数的分隔符,在字符串中间也可能有逗号(原因可能是原始数据输入错误),所以搞出来的这个XLSX文件,每一行的长度是不一样的:
还有一些原因类似的bug:
崩坏成这样的数据,计算机是没法高效检索的。于是我写了一个python脚本,将数据整理成程序员们喜闻乐见的CSV格式,过滤掉原文中的逗号、空格和引号,而且确保每行都是11列:
import re
pat1 = r'\((.*)\);'
def proc(s):
if s[0]=="'" and s[-1]=="'":
return s[1:-1]
elif s=='null':
return ''
else:
print(s)
raise Exception('nope')
def eat(l):
l = l.strip()
# rec = l
try:
l = l.replace('\t',',')
rec = l
l = l.replace('\\"','\\')
l = l.replace('","',',')
m = re.search(pat1,l)
if not m:
return False
l = m[1]
l = l.replace('null', "'null'")
l = eval(l)
# print(l)
l = [i.replace(',','').replace("'",'').replace('"','').replace('$','').strip() if i else i for i in l]
assert len(l)==11
except Exception as e:
print(rec)
raise e
return l
files = '1.txt','2.txt'
# save from xlsx to unicode-txt in microsoft excel 2010
# should be in utf-16 encoding
result = open('result.txt','w',encoding='utf-8')
for fn in files:
with open(fn,'r', encoding='utf-16') as f:
while 1:
l = f.readline()
if l:
tup = eat(l)
if tup:
result.write(','.join(tup) + '\n')
else:
break
运行上面这个脚本前,请先把两个xlsx文件用Excel2010打开,然后保存为Unicode文本文件(txt),分别命名为 1.txt 和 2.txt
运行脚本后会得到result.txt,内容预览如下:
1,陶凌霞,女,汉族,上海,中共黄浦区委宣传部机关支部委员会,310110198305082041,松花江路1160弄24号601室,13795206049,null,硕士研究生
2,吕清逸,男,汉族,上海,黄浦区审计局机关党支部,310102195310292031,null,13621647402,null,大学
3,姚茂华,男,汉族,上海,中共黄浦区人民政府办公室第三支部委员会,310103192904081218,null,null,null,普通高中
4,王海玲,女,汉族,上海,黄浦区人民法院行装科党支部,310108197401092446,null,null,null,大学
5,杨敷敦,男,汉族,江苏太仓,黄浦区科委第二党支部,310102194212200039,null,null,null,大专
6,许晶彦,男,汉族,上海,中共黄浦区规划和土地管理局机关在职党支部委员会,310103197601282410,昌里东路395弄50号201室,13601621253,null,大学
7,钱华安,男,汉族,上海,中共黄浦区商务委机关第二支部委员会,310109196508156819,null,null,null,大学
8,宋维福,男,汉族,上海,黄浦区民防办机关支部,310110196309098615,null,null,null,大学
9,王雯,女,汉族,浙江,中共黄浦区环境保护局机关支部,310109196707306824,null,null,null,大学
10,周健强,男,汉族,上海,中共黄浦区规划和土地管理局机关在职党支部委员会,420106197310134412,null,null,null,大学
11,杨海霞,女,汉族,上海,中共黄浦区委宣传部新闻中心支部委员会,310101197711102844,null,null,null,大学
12,张英,女,汉族,上海,中共黄浦区妇女联合会第二支部委员会,31010919240516042X,null,null,null,普通高中
13,张培琳,女,汉族,上海,中共黄浦区委组织部机关退休支部委员会,310103195412071666,null,null,null,大学
文件格式为CSV,编码为utf-8,大小为264093KB,7z压缩之后为43361KB。
压缩包链接(Telegram):https://t.me/ccplist/2