{ "info": { "author": "Sergio La Rosa", "author_email": "sergio.larosa89@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "splitnjoin\n==========\n\nSimple module for splitting files into multiple chunks/parts and\nviceversa (from chunks/parts to original file).\n\nI made splitnjoin for 3 reasons: 1. Speed-up uploading sessions (it is\nbetter to upload small, multiple files instead of a larger one; in case\nof network failure some parts of file are already online) 2. Surpass ISP\n*not-nice* upload limitations about filesizes 3. End the laziness of a\nboring sunday\n\nPerformance of splitting/joining phases can vary greatly **depending on\nhardware configuration** (especially the HDD speed).\n\nFor instance, let's try to split a Virtual Box virtual machine sized\n8.5+ GB (.vdi): - A system equipped with AMD Ryzen 7, 16 GB DDR4 and an\nSSD.MD can split the VM in 34 chunks of 250MB each one, in less than 20\nseconds - An older notebook (i3, 8GB DDR3, and 5400 RPM HDD) requires 4+\nminutes to split it with the same parameters\n\nTo read benchmark and performance tests, read sections below\n(\"Perfomance tests\").\n\nImportant: **don't use splitnjoin in production enviroments**, of\ncourse.\n\nRequirements\n------------\n\nA default Python3 installation. It works on every Linux distro and every\nWindows version.\n\nAbout **hardware requirements**: splitting and joining huge files are\n**CPU/RAM intensive tasks** and 'splitnjoin' is currently in its early\ndays so don't expect big updates regarding resource optmization soon (I\nam working on it, that's for sure).\n\nTo put it simple: if you have a system with a fairly capable CPU and 4/8\nGB RAM you shouldn't have any problem splitting huge files (for example,\n8+ GB on hard disk).\n\nInstallation\n------------\n\nInstall using `pip `__\n\n``pip3 install splitnjoin``\n\nExamples\n--------\n\n**Splitting by chunk size example**\n\n.. code:: python\n\n import splitnjoin as snj\n import os\n import sys\n\n fsplitter = snj.FileProcessor()\n\n #Set size of each chunk, for example: 25 mb\n p_size = 25\n\n #File to split and subdir where to save chunks\n from_file = \"myFile.ext\"\n to_dir = \"splitting_dir\"\n\n absfrom, absto = map(os.path.abspath, [from_file, to_dir])\n print('Splitting', absfrom, 'to', absto, 'by', p_size, 'mb...')\n #Split now\n fsplitter.split_file(from_file, p_size, to_dir)\n\n**Splitting by parts example**\n\n.. code:: python\n\n import splitnjoin as snj\n import os\n import sys\n\n fsplitter = snj.FileProcessor()\n\n #Set the number of parts you want, for example: 10\n p_num = 10\n\n #File to split and subdir where to save parts\n from_file = \"myFile.ext\"\n to_dir = \"splitting_dir\"\n\n absfrom, absto = map(os.path.abspath, [from_file, to_dir])\n print('Splitting', absfrom, 'to', absto, 'in', p_num, 'parts...')\n #Split now\n fsplitter.split_file_by_parts(from_file, p_num, to_dir)\n\n**Joining example**\n\n.. code:: python\n\n import splitnjoin as snj\n import os\n import sys\n\n fjoiner = snj.FileProcessor()\n\n #Set the size-value for reading chunks, for example: 25 mb\n readsize = 25\n\n #Set chunks dir and dest filename\n from_dir = \"splitting_dir\"\n to_file = \"joined_myFile.ext\"\n\n absfrom, absto = map(os.path.abspath, [from_dir, to_file])\n print('Joining', absfrom, 'to', absto, 'by', readsize)\n #Join now\n fjoiner.join_file(from_dir, readsize, to_file)\n\nPerformance tests\n-----------------\n\nI made a simple testing and benchmarking tool (splitting a binary file\ninto chunks of 250MB each one).\n\nRun it like this: ``python3 -m splitnjoin.snj_benchmark.py``.\n\nOn my notebook (Intel i3 dual core, 8 GB RAM, 500 GB 5400 RPM disk,\nLinux Mint 18.3) this is the output:\n\n::\n\n [+] Generating fake binary file of 1 GB...\n [+] Please, wait...\n [+] fake_data.bin written.\n [+] Writing time: 13.388530897998862\n\n [+] Splitting /home/sergio/Scrivania/splitnjoin/fake_data.bin to /home/sergio/Scrivania/splitnjoin/test by 250 mb...\n [+] Please, wait...\n [+] Splitting time: 12.705547745999866\n\n [+] Joining /home/sergio/Scrivania/splitnjoin/test to /home/sergio/Scrivania/splitnjoin/joined_fake_data.bin by 250 mb...\n [+] Please, wait...\n [+] Joining time: 15.447953824999786\n\n [+] Calculating md5 hash for both files...\n [+] Please wait...\n [+] md5: 98a1c12f80bc9344846e75dc3b406611 for fake_data.bin\n [+] md5: 98a1c12f80bc9344846e75dc3b406611 for joined_fake_data.bin\n [+] Hashing time: 7.4639659309996205\n\n [+] Integrity Check OK, the files are identical.\n\n [+] Removing test files...\n [+] fake_data.bin removed.\n [+] joined_fake_data.bin removed.\n [+] Removing test dir...\n [+] Test directory removed.\n\nTO-DO:\n------\n\n- [STRIKEOUT:Improve splitting and joining methods to speedup the\n entire process] (moved to `splitnjoiny\n project `__)\n- [STRIKEOUT:Use multiprocess module to improve performance (if\n possibile, *i'm looking at you, I/O interface*)] (moved to\n `splitnjoiny project `__)\n- Using the module for write a basic CLI application and...\n- ...Cross-compile this CLI application for Linux/macOS/Windows\n (multiplatform-binary)", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/SergioLaRosa/splitnjoin", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "splitnjoin", "package_url": "https://pypi.org/project/splitnjoin/", "platform": "", "project_url": "https://pypi.org/project/splitnjoin/", "project_urls": { "Homepage": "https://github.com/SergioLaRosa/splitnjoin" }, "release_url": "https://pypi.org/project/splitnjoin/0.76/", "requires_dist": null, "requires_python": "", "summary": "Simple module for splitting binary files into multiple chunks/parts and viceversa (from chunks/parts to original file)", "version": "0.76" }, "last_serial": 3713356, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "f3515b666c242ce2fd84f6fd5c4372da", "sha256": "e4ee5513ce0ed144673ac094d56deea2b1bf585fd080aca11ce825d998c5e892" }, "downloads": -1, "filename": "splitnjoin-0.1.tar.gz", "has_sig": false, "md5_digest": "f3515b666c242ce2fd84f6fd5c4372da", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1390, "upload_time": "2018-03-12T11:10:48", "url": "https://files.pythonhosted.org/packages/fd/9b/d06bf0de72e7cd6a311c258533aff35ccd2b08652c99b63db87be094393b/splitnjoin-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "46c8928fd1a4f3654d62e334d770dee1", "sha256": "f17b4da5ac8b46b5a12975f56e0c40218b2c200b7c2992ca18469e9c04a3bb2d" }, "downloads": -1, "filename": "splitnjoin-0.2.tar.gz", "has_sig": false, "md5_digest": "46c8928fd1a4f3654d62e334d770dee1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1413, "upload_time": "2018-03-12T13:59:11", "url": "https://files.pythonhosted.org/packages/2d/21/88436efb52cdc978386abc1fdf58a3e17164c3986f0c2c3e7278d0b26573/splitnjoin-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "9f2cd1ddcf1af30b1e7a2edcf80f1b81", "sha256": "32493bddc58d28174afac98dd4fe8b8aa811143777896e96e547f10011b6641d" }, "downloads": -1, "filename": "splitnjoin-0.3.tar.gz", "has_sig": false, "md5_digest": "9f2cd1ddcf1af30b1e7a2edcf80f1b81", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1668, "upload_time": "2018-03-12T15:05:47", "url": "https://files.pythonhosted.org/packages/cb/bf/eee211d8fd66547799b013100ff2529567938116d20f882c900505774938/splitnjoin-0.3.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "49c881f6567a2bda32cd2eb505315a83", "sha256": "a49cddc9ded9cb2b7051692ccae33a47a0ba0c2fccd49a836a242c8475e5ae01" }, "downloads": -1, "filename": "splitnjoin-0.4.tar.gz", "has_sig": false, "md5_digest": "49c881f6567a2bda32cd2eb505315a83", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1772, "upload_time": "2018-03-13T15:43:45", "url": "https://files.pythonhosted.org/packages/79/aa/df6cecf15231f9a66d868242ee6a390c98762039fc9ec538b50bcff264e4/splitnjoin-0.4.tar.gz" } ], "0.41": [ { "comment_text": "", "digests": { "md5": "9937a8a7f37df8cb6852925a64f2cc55", "sha256": "2b22a709769d4875040098fa27b87940d2bb2a3c3202703bd501d4f9d5895f9c" }, "downloads": -1, "filename": "splitnjoin-0.41.tar.gz", "has_sig": false, "md5_digest": "9937a8a7f37df8cb6852925a64f2cc55", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1773, "upload_time": "2018-03-13T16:13:53", "url": "https://files.pythonhosted.org/packages/70/72/05e362622974bf2e272c07f708aa078d3c29c475538179ffbccd242e1d76/splitnjoin-0.41.tar.gz" } ], "0.42": [ { "comment_text": "", "digests": { "md5": "c634c39e10b76b5576dc1a708dbe33d4", "sha256": "37de3f80b09b721c1f6130b96a850f2a72441e878fbbb92667317a0952fa3b4b" }, "downloads": -1, "filename": "splitnjoin-0.42.tar.gz", "has_sig": false, "md5_digest": "c634c39e10b76b5576dc1a708dbe33d4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2419, "upload_time": "2018-03-14T11:42:36", "url": "https://files.pythonhosted.org/packages/ed/00/3a0e5c5f6e35d000a79199b4ebd9e1cca1cd0abeca6349dcc064b54ed23f/splitnjoin-0.42.tar.gz" } ], "0.43": [ { "comment_text": "", "digests": { "md5": "6d34d95892e239e2693713bf797ac9c2", "sha256": "78e4704ed32ef3563ce7c819648e9374901a856f889da47acfcb6b3707257253" }, "downloads": -1, "filename": "splitnjoin-0.43.tar.gz", "has_sig": false, "md5_digest": "6d34d95892e239e2693713bf797ac9c2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2468, "upload_time": "2018-03-17T11:58:16", "url": "https://files.pythonhosted.org/packages/de/e4/8f53da0aeac54de23a78b22c5bbf358c9c46aed819f28de7554f3b06eab3/splitnjoin-0.43.tar.gz" } ], "0.44": [ { "comment_text": "", "digests": { "md5": "064ff82cf07839f013010012059987e7", "sha256": "46dd435f861a42819aba5465093ea11833d4c94522ec69e11ac2b66a6e5ddbf4" }, "downloads": -1, "filename": "splitnjoin-0.44.tar.gz", "has_sig": false, "md5_digest": "064ff82cf07839f013010012059987e7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2472, "upload_time": "2018-03-17T20:47:20", "url": "https://files.pythonhosted.org/packages/82/22/eba1ab3fa5a6c86e6e929819c17fa1e07f1b495b3e0d044b5211e864d4ba/splitnjoin-0.44.tar.gz" } ], "0.50": [ { "comment_text": "", "digests": { "md5": "9c23cc98427e4bf3019b79d50f6cd35c", "sha256": "4dfb0bb4b35f75b0d02118d9a73c30b2ab733d312b7a6f51bfbfbaf8800af629" }, "downloads": -1, "filename": "splitnjoin-0.50.tar.gz", "has_sig": false, "md5_digest": "9c23cc98427e4bf3019b79d50f6cd35c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2582, "upload_time": "2018-03-20T18:26:50", "url": "https://files.pythonhosted.org/packages/01/78/15963065388278fd1c5ea99a0e449520c53550bb9170e4e5c4f539cb90d1/splitnjoin-0.50.tar.gz" } ], "0.51": [ { "comment_text": "", "digests": { "md5": "af3c6d7221c12ff38efb7b4079e1dd7c", "sha256": "84824559dd71097f6e6ca06cf8b807dbad508e6eb69db5b305bb869c51728f5f" }, "downloads": -1, "filename": "splitnjoin-0.51.tar.gz", "has_sig": false, "md5_digest": "af3c6d7221c12ff38efb7b4079e1dd7c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2626, "upload_time": "2018-03-20T18:35:27", "url": "https://files.pythonhosted.org/packages/fd/f8/b501d0d3bfa3698576b09c1430d3859f8a347b184aa251f6d051c5439a7a/splitnjoin-0.51.tar.gz" } ], "0.60": [ { "comment_text": "", "digests": { "md5": "13df993b2b95afab3976840b87f61cf6", "sha256": "cb429bf30dea3f550ba7f1c8b77d2715361dc8815203ee46aeec415701acf979" }, "downloads": -1, "filename": "splitnjoin-0.60.tar.gz", "has_sig": false, "md5_digest": "13df993b2b95afab3976840b87f61cf6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2548, "upload_time": "2018-03-21T18:43:41", "url": "https://files.pythonhosted.org/packages/a3/9b/2cca5462960b2a22985392d85edab6671673aa9ce78ce96dce39d4815b65/splitnjoin-0.60.tar.gz" } ], "0.62": [ { "comment_text": "", "digests": { "md5": "3685c7a04cabee5f76692f8fdc54c21f", "sha256": "4886a3891bcca1b82cb904846faaf75ee545dbabe6a308a0e8dde860342ad842" }, "downloads": -1, "filename": "splitnjoin-0.62.tar.gz", "has_sig": false, "md5_digest": "3685c7a04cabee5f76692f8fdc54c21f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2760, "upload_time": "2018-03-22T13:07:38", "url": "https://files.pythonhosted.org/packages/8e/b8/ca9f5f5d0fda631eb1fa10cbe662a8c5798adca062ea7caa05b16ddd7965/splitnjoin-0.62.tar.gz" } ], "0.65": [ { "comment_text": "", "digests": { "md5": "5f83dac9d2c4691809111550c69a8712", "sha256": "cd3a399f2a4ef2a6c028cdaf4076ebb113b626ab6b7586d16c377509ff5c8174" }, "downloads": -1, "filename": "splitnjoin-0.65.tar.gz", "has_sig": false, "md5_digest": "5f83dac9d2c4691809111550c69a8712", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2742, "upload_time": "2018-03-22T17:09:04", "url": "https://files.pythonhosted.org/packages/97/d6/c08c72b11487693fa45ae2b6d9057c9a593b856696ff9ac17b20f0906253/splitnjoin-0.65.tar.gz" } ], "0.66": [ { "comment_text": "", "digests": { "md5": "1820a8ef9d20ec46c2c73e1bb9d33386", "sha256": "ca9f74b6dba15b0f090728bb195e71cccde792cbe2d76b674e66842f281b7e4c" }, "downloads": -1, "filename": "splitnjoin-0.66.tar.gz", "has_sig": false, "md5_digest": "1820a8ef9d20ec46c2c73e1bb9d33386", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5021, "upload_time": "2018-03-22T17:51:55", "url": "https://files.pythonhosted.org/packages/ca/86/7c0b2327f15fbf96fb957e55febc715bb23ba296c4f43a4c40bd9dff4e6f/splitnjoin-0.66.tar.gz" } ], "0.7": [ { "comment_text": "", "digests": { "md5": "f87675e8998c4ce4af148eb14325124f", "sha256": "9d00e9abd98593191554f552aa3237a6f9e8e4c083394fb8b24391c5017d9d55" }, "downloads": -1, "filename": "splitnjoin-0.7.tar.gz", "has_sig": false, "md5_digest": "f87675e8998c4ce4af148eb14325124f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5319, "upload_time": "2018-03-25T17:48:07", "url": "https://files.pythonhosted.org/packages/2a/d9/c804df0d81910d43f33e2423d4b7bf2cdf3b2a8ddb55152958cfb4f6c20a/splitnjoin-0.7.tar.gz" } ], "0.71": [ { "comment_text": "", "digests": { "md5": "377d85ca2e9c44b66d675270244a165f", "sha256": "c6b10182536d9b9d4dd1f07b9908fa964f9a6ad4be209e40cff542269417809d" }, "downloads": -1, "filename": "splitnjoin-0.71.tar.gz", "has_sig": false, "md5_digest": "377d85ca2e9c44b66d675270244a165f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5324, "upload_time": "2018-03-25T17:51:08", "url": "https://files.pythonhosted.org/packages/29/bd/fb575293c683654424e3e8cdd3691d99682a570fcddeaaae1700e0aed2dc/splitnjoin-0.71.tar.gz" } ], "0.72": [ { "comment_text": "", "digests": { "md5": "57b86430cfffbdcc5106253f2ce1918b", "sha256": "de67adf71d8d41a2b5043e696710a52a60fcf046da8c7c50045e2482b814c615" }, "downloads": -1, "filename": "splitnjoin-0.72.tar.gz", "has_sig": false, "md5_digest": "57b86430cfffbdcc5106253f2ce1918b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5318, "upload_time": "2018-03-25T17:54:41", "url": "https://files.pythonhosted.org/packages/69/15/28e280967694981fb663ca6ec6c805528eba4d980591c1bc7476d06ef8cd/splitnjoin-0.72.tar.gz" } ], "0.75": [ { "comment_text": "", "digests": { "md5": "6e9b62bec205b4303622ca8c0cfa12df", "sha256": "e4d3a781741c10141893be97b6f6f6d552286823e1840d89f03791354cc8894c" }, "downloads": -1, "filename": "splitnjoin-0.75.tar.gz", "has_sig": false, "md5_digest": "6e9b62bec205b4303622ca8c0cfa12df", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5568, "upload_time": "2018-03-28T11:02:45", "url": "https://files.pythonhosted.org/packages/59/9f/1a7fa64f77884f9d67364d42d94548a3ca04df8908b8c572234c7fa0f046/splitnjoin-0.75.tar.gz" } ], "0.76": [ { "comment_text": "", "digests": { "md5": "c9464004131f9ca36d2de39031ee519f", "sha256": "2a3e32144bf6df251273fd2680345165ad05fe8999c2df9502cb8c038da8a48e" }, "downloads": -1, "filename": "splitnjoin-0.76.tar.gz", "has_sig": false, "md5_digest": "c9464004131f9ca36d2de39031ee519f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5583, "upload_time": "2018-03-28T11:07:29", "url": "https://files.pythonhosted.org/packages/40/85/e83a8db63dbb52272d69831c4ef796d02a6f5c473e85c117a0bb4981db93/splitnjoin-0.76.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c9464004131f9ca36d2de39031ee519f", "sha256": "2a3e32144bf6df251273fd2680345165ad05fe8999c2df9502cb8c038da8a48e" }, "downloads": -1, "filename": "splitnjoin-0.76.tar.gz", "has_sig": false, "md5_digest": "c9464004131f9ca36d2de39031ee519f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5583, "upload_time": "2018-03-28T11:07:29", "url": "https://files.pythonhosted.org/packages/40/85/e83a8db63dbb52272d69831c4ef796d02a6f5c473e85c117a0bb4981db93/splitnjoin-0.76.tar.gz" } ] }