鱼C论坛

 找回密码
 立即注册
查看: 2055|回复: 15

python如何处理大量数据?

[复制链接]
发表于 2018-10-9 19:29:45 | 显示全部楼层 |阅读模式
80鱼币
处理对象:一个3M的txt文件,UTF-8编码。

试过yield不行。

求问有没有其它办法。


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-10-9 19:32:56 | 显示全部楼层
BTW,文件读取出来以后还要对大量的内容进行遍历和增删改,并且也不卡死。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-9 19:58:49 | 显示全部楼层
什么数据啊??为什么不先弄个数据库或者json格式来处理??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-9 20:02:44 From FishC Mobile | 显示全部楼层
你是想读取大文件么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-10-9 20:07:37 | 显示全部楼层
wongyusing 发表于 2018-10-9 19:58
什么数据啊??为什么不先弄个数据库或者json格式来处理??

一堆普通的字符串,想问问有没有什么简单的方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-10-9 20:08:23 | 显示全部楼层
幽梦三影 发表于 2018-10-9 20:02
你是想读取大文件么

是的,读取出来还要增删改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-9 20:13:33 | 显示全部楼层
403141996 发表于 2018-10-9 20:08
是的,读取出来还要增删改

呃,这个txt文件有什么格式啊,能不能逐条读入,改成json 或者pickle 存储    然后用json 或者pickle 增删改啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-9 20:14:13 | 显示全部楼层
403141996 发表于 2018-10-9 20:07
一堆普通的字符串,想问问有没有什么简单的方法

类似于csv之类的数据,有规律的就好弄,

不规律的只能一行一行的看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-9 21:53:40 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-9 22:53:26 | 显示全部楼层
有服务器的话在服务器端运行吧,或者自己上网查一查CUDA并行计算,用GPU计算应该不会卡。(怎么用我也不清楚,之前上课学了一点CUDA,但是都忘干净了)我自己一般是连学校的服务器运行,处理大数据耗时间是常有的事,我有时候处理数据一百多核并行还要等上一天。万一中间出现问题就GG了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-10 09:37:42 | 显示全部楼层
本帖最后由 wwhywhy 于 2018-10-10 09:57 编辑

//////////  1)文件如果是一行一条数据:
import os
//FILE_WITH_PATH = .....
if os.path.exists(FILE_WITH_PATH):
    try:
        f = open(FILE_WITH_PATH, encoding="utf-8", mode="a")
        while True:
            line = f.readline()
            if not line:
                break
            print(line)
        f.close()
    except IOError, msg:
        print '*** Cannot open', fullname, ':', msg
        return 0
else:
    print("文件:<", FILE_WITH_PATH, ">不存在。")

///////////  2)如果文件就是一条数据:
import os
//FILE_WITH_PATH = .....
if os.path.exists(FILE_WITH_PATH):
    try:
        f = open(FILE_WITH_PATH, encoding="utf-8", mode="a")
        while True:
            block = f.read(1024)
            if not block:
                break
            print(block)
        f.close()
    except IOError, msg:
        print '*** Cannot open', fullname, ':', msg
        return 0
else:
    print("文件:<", FILE_WITH_PATH, ">不存在。")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-13 21:18:47 | 显示全部楼层
循环本身是没有什么耗时的;恐怕资源消耗于数字a的反复调整变化上;
如果内存资源充裕的话建议不对数组a进行del操作,而是顺序地将满足条件的数据添加到新数组中。
使用多线程处理重复逻辑。建议使用3以上,2.x会存在gil线程锁分配问题。但目前很多服务器的python都是2.x的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-13 21:28:04 | 显示全部楼层
本帖最后由 幽梦三影 于 2018-10-13 21:45 编辑
  1. def read_big_file(f, split_key):
  2.     cache = ''
  3.     while 1:
  4.         while split_key in cache:
  5.             position = cache.index(split_key)
  6.             yield cache[:position]
  7.             cache = cache[position+len(split_key):]
  8.         b = f.read(4)
  9.         if not b:
  10.             yield cache
  11.             break
  12.         cache += b

  13. with open('1.txt') as f:
  14.     for i in read_big_file(f, 'e'): #分割字符
  15.         i = 'changed'                   #修改
  16.         print(i)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-17 10:29:01 | 显示全部楼层
0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-20 18:31:18 | 显示全部楼层
可以用pandas处理试试哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-23 16:39:32 | 显示全部楼层
如果文件是 3M的文件,本身也不是什么大数据问题,我处理几十万的数据数据也也很快,但是几千w有点慢了,我是把一些文件写入 csv 在处理, 我的问题地址(https://fishc.com.cn/thread-123130-1-1.html)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 05:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表