开发者社区> walb呀> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

文件存储 - 数据结构( py )

简介:
+关注继续查看
虽然 mysql,oracle 和  Berkeley DB,sqlite3 等数据库已经很好 
但是当我初略学习下 数据挖掘方面的一些知识发现,关系数据库远远不够来存储,查询 etl 后的数据 
比如:我希望原始日志数据进行某一字段的排序,是不是很简单 。 
有人说  - 数据导入数据库 load into table ... , select order by 。之
还有人说 - linux sort -n... 
恩!很好,下面我们对大小为 1TB 的数据开始进行这个简单的操作   -- 傻眼了 !!
关于挖掘 - TB 级别的数量在我目前学习挖掘不到半年,就遇到过3-4次之多
解决办法:
对于这个问题 - 我现在希望能有个 大的链表 - (大到内存装不下)
  链表中的struct 结构为 :
   >> 排序属性文件归属
   >> 排序属性整条数据在文件中的 起始位置 - 结束位置
   >> 在排序中的排位 ( 链表结构,只记入比自己小的 属性在此链表的位置  )
比如 : 
1. 文件1内容 => 
说明:
完整数据描述 : 此数据在文件中的 起始位置(当然是通过程序取得的,这为了方便我标出)
..c.  0 
- 22
..a.  
23 - 55
..b.  
56- 76
..d.  
77 - 130
..f.  
131 - 220
..e.  
221 - 243
2. 数据结构预开空间 100 byte
3. 文件存储在描述 : # 链表排序我就不介绍了,数据结构的最基本技能,修改数据结构中的比自己小的指向 
      我这就给出结果
{ /tmp/文件1, 0-22 ,  300 }   #说明 c : 在链表位置 0 
{ /tmp/文件1, 23-55 , 200 }       # a : 100 
{ /tmp/文件1, 56-76 , 0 }     # b : 200 
{ /tmp/文件1, 77-130 , 500 }  # d : 300 
{ /tmp/文件1, 131-220 ,  } # f : 400 
{ /tmp/文件1, 221-243 , 400 } # e : 500 
4. 倒叙输出 由小到到 
     假设预存最小 为  200 链表位置
     找出 使用 open /tmp/文件1  
       并使用 seek 文件游标 定位  23-55 取出  ..a... 
       根据 链表中 200 到 seek 56 76 取出 ..b...
       等等 
当然 上面 
数据结构你可以使用 双向链表, btree , 红黑 , 斐波那契。。。( 数据结构终于感觉有用了,不枉费我考的软证啊!)
通过说明,我这 给大家提供个 可能需要的 技术细节 (py),不足之处 欢迎拍砖!!
1. 二进制文件 结构化 写,修改
#指定修改 190 byte 处的 内容
import os
from struct import *
fd 
= os.open( "pack1.txt", os.O_RDWR|os.O_CREAT )

ss 
= pack('ii11s'34'google')
os.lseek(fs, len(ss)
*10, 0) 
os.write(fs,ss) 
os.fsync(fs)

#os.close( fs )
2. seek 指定位置结构化读取


from struct import *
file_object 
= open('pack1.txt''rb')

def ts(si,ss=len(ss)):
    file_object.seek(si
*ss)
    chunk 
= file_object.read(ss)
    a,b,c
=unpack('ii11s', chunk )
    
print a,b,c

ts(10)
#输出  
3 4 google

1. 其他语言的 使用
struct 结构定义 ,在 python 中 使用  struct 包,这样序列出来的数据到文件中其他语言也可以使用 
 参考: http://www.pythonid.com/bbs/archiver/?tid-285.html
pack1.py
from struct import *

# i 为 int(4)  11s 为预留 11 位置 的 string 
# 此数据类型 为 19 byte ss 
= pack('ii11s'12'hello world')

= open("pack1.txt""wb")
f.write(ss)
f.close()


上面的代码往C的结构中写入数据,结构包括两个整型和一个字符串。
pack1.c
#include <stdio.h>
#
include <string.h>

struct AA
{
    int a;
    int b;
    char    c[
64];
};

int main()
{
    struct AA   aa;
    FILE    
*fp;
    int     size, readsize;
      
    memset(
&aa, 0, sizeof(struct AA));
   
    fp 
= fopen("pack1.txt""rb");
    
if (NULL == fp) {
        printf(
"open file error!"n");
        
return 0;
    }
   
    readsize 
= sizeof(struct AA);
    printf(
"readsize: %d"n", readsize);
  
    size 
= fread(&aa, 1, readsize, fp);   
    printf(
"read: %d"n", size);
    printf(
"a=%d, b=%d, c=%s"n", aa.a, aa.b, aa.c);
   
    fclose(fp);
   
    
return 0;
}

结果输出:
C:"Documents and Settings"lky"桌面"dataStructure>a
readsize: 72
read: 57
a=1, b=2, c=hello word
最后罗嗦下:
能用数据结构了,很多东西都可以根据自己逻辑定制 存储很方便 。 不再受 关系数据库 , key 数据库 或 mapreduce 的限制 
参考:
http://docs.python.org/library/struct.html#module-struct    #官方struct 包 说明
http://blog.csdn.net/JGood/archive/2009/06/22/4290158.aspx  # 使用 struct  的前辈留下的
http://www.tutorialspoint.com/python/os_lseek.htm #一个小demo 

Python天天美味(17) - open读写文件

本文转自博客园刘凯毅的博客,原文链接:文件存储 - 数据结构( py ),如需转载请自行联系原博主。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【数据结构和算法】图的各类概念与图的存储结构(还有十字链表与邻接多重表的介绍)
【数据结构和算法】图的各类概念与图的存储结构(还有十字链表与邻接多重表的介绍)
23 0
【数据结构】图的存储结构—邻接表
【数据结构】图的存储结构—邻接表
27 0
数据结构——双链表
数据结构——双链表
25 0
数据结构——线性表的顺序存储结构
数据结构——线性表的顺序存储结构
78 0
数据结构实践项目——文件
本文是针对[数据结构基础系列(11):文件]中的实践项目。 【项目1】操作文件 有若干学生的成绩数据如下,将这些数据保存到st数组中: 学号 姓名 年龄 性别 语文 数学 英语 1 陈华 20 男 78 90 84 5 张明 21 男 78 68 92 8
772 0
FAT32文件系统的存储组织结构(一)
<div class="Blog_wz1" style="word-wrap: break-word; font-size: 16px;"> <p style="word-wrap: break-word; margin-top: 5px; margin-bottom: 5px; padding-top: 0px; padding-bottom: 0px;"> 对磁盘的物理结构,逻辑结构和存储
2859 0
采用左右值编码来存储无限分级树形结构的数据库表设计
本文转载:http://www.cnblogs.com/yongzhi/articles/1187149.html 这篇文章也很不错:http://hi.baidu.com/zhizheqianlv/item/543fd806c92673db73e6761c
1086 0
聊聊树状结构如何在数据库中存储
转发:http://www.cnblogs.com/honghuamin/archive/2011/07/24/2115635.html
876 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载