V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
kkk414
V2EX  ›  问与答

请问如何将批量存储在 TXT 文本中的照片信息批量导出,并将导出的照片信息命名为对应人员的证件号码?

  •  
  •   kkk414 · 2015-10-24 19:21:40 +08:00 · 4008 次点击
    这是一个创建于 3187 天前的主题,其中的信息可能已经有所发展或是发生改变。
    因工作需要,现在要处理大量人员数据。
    而数据源全是 TXT 文本保存,内容有个人身份信息和头像照片。
    现在需要需要将 TXT 中的照片批量导出,并命名为对应人员的身份证号码。

    不知道有无相关处理经验高手不吝赐教

    测试源 TXT : http://pan.baidu.com/s/1kTrQYUj
    第 1 条附言  ·  2015-10-25 00:44:37 +08:00
    说明一下大家关心的问题,本贴所提供的测试数据是处理过的(姓名、证件号,头像都没有对应关系)
    如遇红领巾 V 友,请 mail:414kkk[诶他]163.com .
    29 条回复    2015-10-26 19:01:59 +08:00
    virusdefender
        1
    virusdefender  
       2015-10-24 19:29:19 +08:00
    后面的一堆看着像 base64

    写个 Python 脚本分割就行啊
    orzfly
        2
    orzfly  
       2015-10-24 19:35:23 +08:00
    "此项暂不返回核查结果"……

    今天刚好看到一个帖子里的图……啧啧。
    http://static.wooyun.org/wooyun/upload/201510/20201057358328cb04f97b3d35b20325bacbdb62.png
    http://www.wooyun.org/bugs/wooyun-2015-0148164
    just1
        3
    just1  
       2015-10-24 20:07:00 +08:00 via Android
    txt 啥时能保存图像了
    vmebeh
        4
    vmebeh  
       2015-10-24 20:10:51 +08:00
    前面几个应该是标志位,然后是 Base64 的二进制数据, JFIF 格式的 JPG
    kkk414
        5
    kkk414  
    OP
       2015-10-24 20:35:15 +08:00
    @orzfly 对这是人行的核查结果,有办法批量导出吗?
    kkk414
        6
    kkk414  
    OP
       2015-10-24 20:38:50 +08:00
    @virusdefender 不懂 Python 请指教
    kkk414
        7
    kkk414  
    OP
       2015-10-24 20:39:56 +08:00
    @just1 也是头次遇到,单独把后面的一串字条保存成 JPG 又打不开
    kkk414
        8
    kkk414  
    OP
       2015-10-24 20:40:56 +08:00
    @vmebeh 谢谢分析,求处理方法
    ferock
        9
    ferock  
       2015-10-24 20:46:39 +08:00 via Android
    伸手党
    gdtv
        10
    gdtv  
       2015-10-24 20:51:04 +08:00   ❤️ 2
    PHP 的处理方法:

    ><?php
    header('Content-Type: text/html; charset=gb2312');
    $d = dir(dirname(__FILE__));
    while(false !== ($v = $d->read())) {
    if(strpos($v,'TXT')){
    $file_str = file_get_contents($v);
    $file_lines = explode("\r\n",$file_str);
    foreach($file_lines as $file_line){
    preg_match('/[\s]{10,}([\d]{18}[ⅩxX]{0,1}).*[\s]{5,}00(.*)$/',$file_line,$file_parts);
    if($file_parts[1] && $file_parts[2]){
    file_put_contents($file_parts[1].'.jpg', base64_decode($file_parts[2]));
    }
    }
    }
    }
    echo 'ok';

    将以上代码保存成一个.php 文件,和所有数据源 TXT 文件一起放到同一个目录,然后运行
    Zzzzzzzzz
        11
    Zzzzzzzzz  
       2015-10-24 20:57:18 +08:00
    你这直接把名字、身份证号和照片合并成的文件当例子放出来下载不好吧
    kkk414
        12
    kkk414  
    OP
       2015-10-24 21:09:08 +08:00
    @Zzzzzzzzz 除了头像,其它信息都处理过了,都是随机改的。
    kkk414
        13
    kkk414  
    OP
       2015-10-24 21:12:53 +08:00
    @gdtv 谢谢提供方法 ,
    COPY 了代码并存 PHP ,但 PHP 要用什么运行?双击 PHP 文件打开了 IE ,结果 IE 里还是显示这段代码
    loading
        14
    loading  
       2015-10-24 21:17:01 +08:00 via Android
    建议楼主用网上的图片做几个样本文件,提供给大家测试,不然你这种伸手法是没结果的。
    loading
        15
    loading  
       2015-10-24 21:20:20 +08:00 via Android
    看完楼主还问如何运行 php ,自己居然不先自己搜索一下…

    好人不代表是保姆!

    也许有偿会好一些,楼主来个价格吧,也许睡醒这个问题就解决了,目测不需要你一周的工资。
    kkk414
        16
    kkk414  
    OP
       2015-10-24 21:35:21 +08:00
    @loading 谢谢提醒,你说的也在理
    gdtv
        17
    gdtv  
       2015-10-24 22:07:51 +08:00
    @loading 楼主不懂 PHP ,让他运行 PHP 确实是件麻烦事,希望有戴红领巾的大侠写个 exe 给楼主直接运行吧
    abelyao
        18
    abelyao  
       2015-10-24 22:40:32 +08:00
    EXE 工具不难写,好奇的是数据来源…
    loading
        19
    loading  
       2015-10-24 22:43:07 +08:00 via Android
    @abelyao 这个不可细问,涉及商业秘密吧~
    icedx
        20
    icedx  
       2015-10-24 23:14:16 +08:00
    楼主要么分享我数据 要么买我程序 我已经写好了
    abelyao
        21
    abelyao  
       2015-10-24 23:15:16 +08:00
    @loading 就怕数据是从哪里弄来的… 毕竟 demo 都没有打码,原名及身份证信息都…
    kkk414
        22
    kkk414  
    OP
       2015-10-25 00:32:48 +08:00
    @abelyao 数据来源是本地人行的核查数据,跟 @orzfly 提的内容毫不相关(人家的是考试系统练手的), @abelyao @icedx @loading 多想了,如果真如你们所疑,有通过非正途获得数据的技能,又何愁要来此请大家教? 大家心里有点想法也是正常的,还是要谢谢各位关注。
    sualwu
        23
    sualwu  
       2015-10-25 09:59:03 +08:00   ❤️ 1
    Linux 下, 一行命令就可以了:
    awk '{if(NF == 3){filename=substr($2,1,18);sub(/^00/,"",$3);system("echo "$3"|base64 -d >"filename)}}' 10355.TXT

    kkk414
        24
    kkk414  
    OP
       2015-10-25 11:26:45 +08:00
    @sualwu 谢谢提供参考方案,请问如何批量处理多个 TXT 文档? 另外这种方案只能在 Linux 下实现吗?楼上也有 @gdtv 红领巾 V 友写了 PHP 可惜我是个门外汉,再次谢谢他
    horsley
        25
    horsley  
       2015-10-25 13:40:40 +08:00
    门外汉的话,还是花点钱吧,有钱,给你做批量处理 做独立运行 exe 都不是问题
    kkk414
        26
    kkk414  
    OP
       2015-10-25 14:59:25 +08:00
    @horsley 有钱能使人推磨吗?
    感觉 V 友中也有不乏红领巾,交流和买卖是两码事。祝你工作顺利
    kkk414
        27
    kkk414  
    OP
       2015-10-26 15:08:15 +08:00
    @gdtv 按你的方案已经单个文件成功导出了,但是多个 TXY 批量的导出只能到 7 千多张,请教一下

    Fatal error: Maximum execution time of 60 seconds exceeded in D:\1.php on line 12
    gdtv
        28
    gdtv  
       2015-10-26 16:03:17 +08:00   ❤️ 1
    @kkk414 改了一下,你再试试

    <?php
    header('Content-Type: text/html; charset=gb2312');
    $d = dir(dirname(__FILE__));
    while(false !== ($v = $d->read())) {
    if(strpos($v,'TXT')){
    set_time_limit(120);
    $file_str = file_get_contents($v);
    $file_lines = explode("\r\n",$file_str);
    foreach($file_lines as $file_line){
    preg_match('/[\s]{10,}([\d]{18}[ⅩxX]{0,1}).*[\s]{5,}00(.*)$/',$file_line,$file_parts);
    if($file_parts[1] && $file_parts[2]){
    file_put_contents($file_parts[1].'.jpg', base64_decode($file_parts[2]));
    }
    }
    }
    }
    echo 'ok';
    kkk414
        29
    kkk414  
    OP
       2015-10-26 19:01:59 +08:00
    set_time_limit(120); 搜了下也可以通过修改 php.ini 设定是限。
    OK 了 感谢 @gdtv 指点!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3693 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 10:23 · PVG 18:23 · LAX 03:23 · JFK 06:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.