以节省内存的方式处理一些数据

karld的Python项目详细描述


如何数据

  1. 拆分数据。
  2. 创建一个将数据作为迭代器的生成器,生成键和值对。
  3. 按键对每个键/值对列表进行排序。
  4. 使用heap按键合并键/值对列表。
  5. 按键对键/值对分组。
  6. 将每个键分组的值减少到一个值,从而产生一个键/值对。

您可以使用密钥函数代替密钥,只要它生成 在映射排序合并组阶段中使用相同的键。

分割数据

使用分割文件分割数据文件或使用分割csv文件分割 可能有多行字段以确保它们不被拆分的csv文件。:

import os

import karld

big_file_names = [
    "bigfile1.csv",
    "bigfile2.csv",
    "bigfile3.csv"
]

data_path = os.path.join('path','to','data', 'root')


def main():
    for filename in big_file_names:
        # Name the directory to write the split files into based
        # on the name of the file.
        out_dir = os.path.join(data_path, 'split_data', filename.replace('.csv', ''))

        # Split the file, with a default max_lines=200000 per shard of the file.
        karld.io.split_csv_file(os.path.join(data_path, filename), out_dir)


if __name__ == "__main__":
    main()

当您生成数据并希望根据数量将其分片到文件时,请使用 拆分输出函数之一,如split_file_output_csvsplit_file_outputsplit_file_output_json

import os
import pathlib

import karld


def main():
    """
    Python 2 version
    """

    items = (str(x) + os.linesep for x in range(2000))

    out_dir = pathlib.Path('shgen')
    karld.io.ensure_dir(str(out_dir))

    karld.io.split_file_output('big_data', items, str(out_dir))


if __name__ == "__main__":
    main()

CSV可序列化数据:

import pathlib

import karld


def main():
    """
    From a source of data, shard it to csv files.
    """
    if karld.is_py3():
        third = chr
    else:
        third = unichr

    # Your data source
    items = ((x, x + 1, third(x + 10)) for x in range(2000))

    out_dir = pathlib.Path('shard_out_csv')

    karld.io.ensure_dir(str(out_dir))

    karld.io.split_file_output_csv('big_data.csv', items, str(out_dir))


if __name__ == "__main__":
    main()

JSON可序列化数据行:

import pathlib

import karld


def main():
    """
    From a source of data, shard it to csv files.
    """
    if karld.is_py3():
        third = chr
    else:
        third = unichr

    # Your data source
    items = ((x, x + 1, third(x + 10)) for x in range(2000))

    out_dir = pathlib.Path('shard_out_json')

    karld.io.ensure_dir(str(out_dir))

    karld.io.split_file_output_json('big_data.json', items, str(out_dir))


if __name__ == "__main__":
    main()

文档

阅读文档:http://karld.readthedocs.org/en/latest/

已在http://karld.readthedocs.org/en/latest/getting-started.html展开“入门”。

更多的例子记录在http://karld.readthedocs.org/en/latest/source/example.html。查看 示例文件的源,例如…

贡献:

在这里提交任何问题:https://github.com/johnwlockwood/karl_data/issues

development的分支发出pull请求
https://github.com/johnwlockwood/karl_data.
documentation是用structuredtext编写的,当前使用
狮身人面像风格 列表http://sphinx-doc.org/domains.html#info-field-lists

查看关闭的pull请求,查看开发流程 对master的每个更改都是通过github上的pull请求完成的。代码评审 是受欢迎的,即使是合并的请求。请随意提问 密码。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
文件名的java正则表达式限制名称大小和文件扩展名   Mac上的java Android SDK:jspawnhelper意外退出   java SQL Server 2000到Oracle 12c重音字符   在Java中快速比较大数据集中的值和小数据集中的值   java在代码中的许多地方保留对对象的引用   Java规范中私有内部类的jvm访问标志与反射API不一致?   比较2个int数组中匹配的数字   java Apache Commons数学简化回归:get prediction stderr   安卓 Java SDK管理器因命令行输出中的“flashplayerplugin”而崩溃   JavaSQLite:关闭DB时必须关闭游标吗?   泛型Java设计抽象类声明示例说明   java应用程序在添加片段时崩溃   如何在java中使用注释为字段加载值