免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: wenjun3000
打印 上一主题 下一主题

[文本处理] 137G超大txt文件,utf-8格式,共10961771行,请高手们帮忙! [复制链接]

论坛徽章:
2
程序设计版块每日发帖之星
日期:2016-08-17 06:20:00每日论坛发贴之星
日期:2016-08-17 06:20:00
21 [报告]
发表于 2016-07-31 09:53 |只看该作者
感谢goofool,用python测试毫无压力,电脑也不卡,只是你没有仔细看我的要求,可能我描述的太复杂。我重新描述,希望goofool你能看到并帮我解答,简单来说,有10961771行代码(以后代码行数更多,每行代码超长),utf-8格式,要按行拆分,拆分后保证每行代码完整,将10961771行代码拆分到220个文件夹下,每个文件夹下50000个文件,每个文件一行代码,每个txt文件后缀改为html(文件内容不变,只改后缀)。

电脑配置如下:
CPU:英特尔 酷睿 i7-4790 CPU @ 3.60GHz (四核8线程)
主板: 华硕 Z87-K (英特尔 Z87 (Lynx Point))
内存: 16 GB , DDR3 , 双通道
显卡: GeForce GTX 750 Ti , 2GB
硬盘: 希捷 ST2000DM001-1CH164 , 7200 转 , 2000 GB
显示器: LG [Unknown Model: GSM5AB8]
网卡: 瑞昱 Semiconductor RTL8168/8111 PCI-E 千兆以太网 NIC
声卡: nVIDIA, Device ID: 0FBC

win7 64位操作系统,昨晚安装了python27
另外测试过很多批处理方法,但总是出现下面错误,只能放弃,
问题签名:
  问题事件名称:        APPCRASH
  应用程序名:        cmd.exe
  应用程序版本:        6.1.7601.17514
  应用程序时间戳:        4ce798e5
  故障模块名称:        cmd.exe
  故障模块版本:        6.1.7601.17514
  故障模块时间戳:        4ce798e5
  异常代码:        c0000005
  异常偏移:        0000000000006ea8
  OS 版本:        6.1.7601.2.1.0.256.1
  区域设置 ID:        2052
  其他信息 1:        189b
  其他信息 2:        189b79bd94a4872b863d627df1a41231
  其他信息 3:        f768
  其他信息 4:        f768182954011548f6597958cd8eaeb7

vbs拆分也可以,但总是乱码,
linux awk等命令在win7无法运行,安装gnuwin32太复杂(担心安装后不会使用,不过安装python,用goofool写的代码,使用很简单)

所以高手们,希望你们帮我看看,能否用python,vbs等win7(64位)能直接运行的完整代码帮我解答,万分感谢!

论坛徽章:
2
程序设计版块每日发帖之星
日期:2016-08-17 06:20:00每日论坛发贴之星
日期:2016-08-17 06:20:00
22 [报告]
发表于 2016-07-31 10:10 |只看该作者
昨晚尝试用goofool写的python代码,改成按一行分割,也就是一个文件夹下生成10961771个文件,但没有成功,生成9,247,827 个文件后,python出错停止运行,出错代码请看附件图片。

python出错.jpg (35.28 KB, 下载次数: 45)

python出错.jpg

论坛徽章:
2
程序设计版块每日发帖之星
日期:2016-08-17 06:20:00每日论坛发贴之星
日期:2016-08-17 06:20:00
23 [报告]
发表于 2016-07-31 10:39 |只看该作者
感谢本友会机友会摄友会,虽然137G的数据没有压缩成功,但我刚刚整理了测试数据,原理一样,就是按行分割,一行一个文件,按顺序放在220个文件夹下(如果数据量更大,文件夹就更多),每个文件夹50000个文件。
其他高手也可帮忙测试,数据放在百度网盘。没有权限发链接,只能把网盘地址盒密码放在附件图片中。

测试数据网盘地址及密码.jpg (4.59 KB, 下载次数: 45)

测试数据网盘地址及密码.jpg

论坛徽章:
0
24 [报告]
发表于 2016-07-31 15:38 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
2
程序设计版块每日发帖之星
日期:2016-08-17 06:20:00每日论坛发贴之星
日期:2016-08-17 06:20:00
25 [报告]
发表于 2016-07-31 16:21 |只看该作者
太感谢本友会机友会摄友会,正在运行程序,已经生成220个文件夹了,文件正在生成,不知道要多少时间,全部生成后,还要请你继续帮忙。

论坛徽章:
2
程序设计版块每日发帖之星
日期:2016-08-17 06:20:00每日论坛发贴之星
日期:2016-08-17 06:20:00
26 [报告]
发表于 2016-07-31 17:07 |只看该作者
还要麻烦"本友会机友会摄友会",我把要求重新完整描述,共有3个txt文件,分别为wzsj.txt(10961771行代码),wjj.txt(220个文件夹),wjm.txt(10961771行文件名),能否按wjj.txt里面的顺序生成220个文件夹,然后按wjm.txt里面的文件名顺序生成html文件,还是每个文件夹放50000个文件,每个文件一行代码,少于50000个文件的放在最后一个文件夹里面,测试数据放在百度网盘。

测试数据.jpg (4.44 KB, 下载次数: 45)

测试数据.jpg

论坛徽章:
2
程序设计版块每日发帖之星
日期:2016-08-17 06:20:00每日论坛发贴之星
日期:2016-08-17 06:20:00
27 [报告]
发表于 2016-07-31 17:09 |只看该作者
放在网盘里面的测试数据,我用中文命名的,实际上三个txt文件名分别为,wzsj.txt(10961771行代码),wjj.txt(220个文件夹),wjm.txt(10961771行文件名)

论坛徽章:
7
申猴
日期:2014-12-21 13:57:24巳蛇
日期:2014-12-25 22:27:08申猴
日期:2015-01-19 08:07:36辰龙
日期:2015-02-04 11:40:06处女座
日期:2015-02-04 11:40:412015年亚洲杯之卡塔尔
日期:2015-03-06 12:01:322015年亚洲杯之乌兹别克斯坦
日期:2015-03-31 13:43:57
28 [报告]
发表于 2016-07-31 20:23 |只看该作者
Intel(R) Celeron(R) CPU G1610T @ 2.30GHz
4G内存
大约28分钟
  1. try:
  2.     import queue as queue
  3. except ImportError:
  4.     import Queue as queue
  5. import codecs
  6. import os
  7. import time
  8. import threading


  9. start = time.clock()
  10. f = codecs.open('data.txt', encoding='utf-8')
  11. _task_queue = queue.Queue(maxsize=1000)
  12. NUM_WORKERS = 100


  13. def _task_queue_consumer(dir_name, f_name, q):
  14.     data = q.get()
  15.     # print(f_name)
  16.     with codecs.open('./{}/{}.html'.format(dir_name, f_name), 'w+', encoding='utf-8') as f_tmp:
  17.         f_tmp.write(data)

  18. tmp = 0
  19. while True:
  20.     tmp += 1
  21.     print(">>>Task {} Starting...".format(tmp))
  22.     dir_name = str(tmp)
  23.     if not os.path.exists(str(dir_name)):
  24.         os.mkdir(str(dir_name))

  25.     fname = 0
  26.     try:
  27.         for j in range(50):
  28.             try:
  29.                 for i in range(1000):
  30.                     _task_queue.put(next(f))
  31.             except StopIteration:
  32.                 pass

  33.             if not _task_queue.qsize():
  34.                 raise Exception
  35.             while True:
  36.                 threads = []
  37.                 for i in range(NUM_WORKERS):
  38.                     fname += 1
  39.                     t = threading.Thread(
  40.                         target=_task_queue_consumer,
  41.                         args=(dir_name, str(fname), _task_queue))
  42.                     threads.append(t)
  43.                     t.start()
  44.                 for t in threads:
  45.                     t.join()
  46.                 if _task_queue.empty():
  47.                     break
  48.     except Exception:
  49.         break
  50.     print(">>>Task {} Finish...".format(tmp))

  51. print(">>>Finished.")
  52. end = time.clock()
  53. print(">>>Used: {} sec".format(end - start))
复制代码

论坛徽章:
2
程序设计版块每日发帖之星
日期:2016-08-17 06:20:00每日论坛发贴之星
日期:2016-08-17 06:20:00
29 [报告]
发表于 2016-07-31 22:26 |只看该作者
回复 28# goofool


还要麻烦"goofool",我把要求重新完整描述,共有3个txt文件,分别为wzsj.txt(10961771行代码),wjj.txt(220个文件夹),wjm.txt(10961771行文件名),能否按wjj.txt里面的顺序生成220个文件夹,然后按wjm.txt里面的文件名顺序生成html文件,还是每个文件夹放50000个文件,每个文件一行代码,少于50000个文件的放在最后一个文件夹里面,测试数据放在百度网盘。
放在网盘里面的测试数据,我用中文命名的,实际上三个txt文件名分别为,wzsj.txt(10961771行代码),wjj.txt(220个文件夹),wjm.txt(10961771行文件名)

论坛徽章:
2
程序设计版块每日发帖之星
日期:2016-08-17 06:20:00每日论坛发贴之星
日期:2016-08-17 06:20:00
30 [报告]
发表于 2016-07-31 22:34 |只看该作者
回复 28# goofool

生成速度很慢

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP