文件存储 - 数据结构( 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 ' 3 4 ' 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 ' 1 2 ' 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 ),如需转载请自行联系原博主。

目录
相关文章
|
2月前
|
存储 SQL Java
bigdata-18-Hive数据结构与存储格式
bigdata-18-Hive数据结构与存储格式
38 0
|
2月前
|
存储 JSON 数据库
在Python中在文件中存储数据
在Python中在文件中存储数据
20 1
|
存储 大数据
大数据数据存储的分布式文件系统的HDFS的基本使用的命令行接口的拷贝/移动文件
在 Hdfs 中,使用命令行接口可以方便地对数据进行操作。
61 1
|
2月前
|
存储 NoSQL 数据库
请解释一下键值存储数据库的工作原理,并提供一个使用键值存储数据库的实际应用场景。
请解释一下键值存储数据库的工作原理,并提供一个使用键值存储数据库的实际应用场景。
112 0
|
2月前
|
存储 NoSQL MongoDB
请解释一下文档存储数据库的工作原理,并提供一个使用文档存储数据库的实际应用场景。
请解释一下文档存储数据库的工作原理,并提供一个使用文档存储数据库的实际应用场景。
74 0
|
2月前
|
存储 NoSQL Java
基于内存的分布式NoSQL数据库Redis(二)数据结构与通用命令
基于内存的分布式NoSQL数据库Redis(二)数据结构与通用命令
193 0
|
存储 NoSQL Redis
Redis从入门到精通之底层数据结构压缩列表(ZipList)详解
Redis中的压缩列表(ZipList)是一种特殊的数据结构,用于存储一系列的连续元素。ZipList是Redis中的底层数据结构之一,常用于存储列表和哈希表等数据类型的底层实现。在本文中,我们将深入了解Redis中的压缩列表,包括ZipList的结构和操作等。
11615 5
|
存储 Java Shell
数据存储与访问——文件存储读写
本节给大家介绍的是Android数据存储与访问方式中的一个——文件存储与读写,当然除了这种方式外,我们可以存到SharedPreference,数据库,或者Application中。
69 0
|
缓存 NoSQL Java
Redis数据结构存储系统:第二章:如何使用
Redis数据结构存储系统:第二章:如何使用
135 0
Redis数据结构存储系统:第二章:如何使用
|
移动开发 Java Linux
猪行天下之Python基础——7.1 文件存储(下)
内容简述: 1、open()函数与文件打开模式 2、file对象提供的函数 3、常见的文件操作示例 4、os模块里的常用函数 5、实用代码示例
157 0