{"id":18564375,"url":"https://github.com/sdam-au/sddk_py","last_synced_at":"2026-05-03T05:39:48.693Z","repository":{"id":44161396,"uuid":"225557617","full_name":"sdam-au/sddk_py","owner":"sdam-au","description":"Functions to access sciencedata.dk","archived":false,"fork":false,"pushed_at":"2023-10-31T11:22:44.000Z","size":846,"stargazers_count":0,"open_issues_count":3,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-11-28T03:26:54.821Z","etag":null,"topics":["package","python","sciencedata","tool"],"latest_commit_sha":null,"homepage":"","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sdam-au.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-12-03T07:29:22.000Z","updated_at":"2022-02-11T15:13:10.000Z","dependencies_parsed_at":"2025-05-15T18:38:50.924Z","dependency_job_id":"1df8123a-7445-4ad9-903c-157e399760f1","html_url":"https://github.com/sdam-au/sddk_py","commit_stats":null,"previous_names":["sdam-au/sddk"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/sdam-au/sddk_py","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sdam-au%2Fsddk_py","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sdam-au%2Fsddk_py/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sdam-au%2Fsddk_py/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sdam-au%2Fsddk_py/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sdam-au","download_url":"https://codeload.github.com/sdam-au/sddk_py/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sdam-au%2Fsddk_py/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32559716,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T03:21:47.309Z","status":"ssl_error","status_checked_at":"2026-05-03T03:21:43.884Z","response_time":103,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["package","python","sciencedata","tool"],"created_at":"2024-11-06T22:14:57.585Z","updated_at":"2026-05-03T05:39:48.664Z","avatar_url":"https://github.com/sdam-au.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# sddk\n\n`sddk` is a Python package for writting and reading files to/from [sciencedata.dk](https://sciencedata.dk/). Since version 3.0, it also supports [owncloud.cesnet.cz](https://www.cesnet.cz/services/owncloud/?lang=en). In the future, it will support other  providers from the [CS3MESH4EOSC](https://cs3mesh4eosc.eu) inciative. It is especially designed for working with shared folders. It relies mainly upon Python requests library.\n\nsciencedata.dk is a project managed by [DEiC](https://www.deic.dk) (Danish e-infrastrcture cooperation) aimed to offer a robust data storage, data management and data publication solution for researchers in Denmark and abroad (see [docs](https://sciencedata.dk/sites/user/) and [dev](https://sciencedata.dk/sites/developer/) for more info). The storage is accessible either through (1)  the web interface, (2) WebDAV clients, (3) OwnCloud/NextCloud desktop applications or (4) API relaying on the HTTP Protocol. One strength of sciencedata.dk is that it currently supports institutional login from 2976 research and educational institutions around the globe (using [WAYF](https://www.wayf.dk/en/about)). That makes it a perfect tool for international research collaboration. \n\nThe main functionality of the package is in uploading any Python object (str, dict, list, dataframe or figure) as a file to a preselected personal or shared folder on the cloud platform and getting it back into Python as the original Python object. It uses sciencedata.dk API in combination with Python requests library.\n\n## Install and import\n\nTo install the package within within command line, run:\n\n```bash\npip install sddk # # to have the latest version, use flag \"--ignore-installed\"\n```\n\nTo install tje package within Jupyter environment, run:\n\n```python\n!pip install sddk # to have the latest version, use flag \"--ignore-installed\"\n```\n\nOnce installed, import the package in the following way:\n\n```python\nimport sddk\n```\n## Authentification\n\nTo establish the cloud session, you have to know the following:\n\n* name of the **service provider**; currently we support two options: `sciencedata.dk` or `owncloud.cesnet.cz` (`sciencedata.dk` by default)\n\n* **username/ID** from the service provider (e.g. \"123456@au.dk\" or \"1fcd40da27c3573f1479718227a43e1a5426aac1\"),\n* **password / token** from the provider (has to be previously configured or generated manually using the web interface of the provider),\n\nIn the case you want to access a shared folder, you further need:\n\n* **name** of the shared folder you want to access (e.g. \"our_shared_folder\"),\n* **username / id** of the owner of the folder (if it is not yours)\n\n### cloudSession()\n\n* parameters:\n  * `provider` - default: \"sciencedata.dk\"; alternatively \"owncloud.cesnet.cz\"\n  * `shared_folder_name` - name of the shared folder; default `None`\n  * `owner` - username of the owner of the shared folder; default `None`\n\nIn the case of a shared folder, you might be either its owner, or it might be a folder which has been shared with you by someone else, who is its owner- one important feature of the package is that in both cases you use *exactly the same syntax*. That means all members of a team can configure the session and access the folder using the same piece of code, the rest is entered interactively.\n\nCalling the `cloudSession()` class, you configure a an authorized session class object `s`, which supports an array of useful functions.\n\n### Establish personal session\n\n```python\ns = cloudSession() # \"sciencedata.dk by default for owncloud.cesnet.cz, run:\n# s = cloudSession(\"owncloud.cesnet.cz\")\n```\n\n### Establish session with root in shared folder\n\nTo configure a session pointing to a shared folder, run:\n\n```python\ns = sddk.cloudSession(\"sciencedata.dk\", \"our_shared_folder\", \"owner_username@au.dk\")\n```\n\nSubsequently, you can locate your files in relative path to this root folder (\"our_shared_folder\") \n\n## write_file()\n\nThe most important components of the package are two functions: `write_file(path_and_filename, python_object)` and `read_file(path_and_filename, type_of_object)`. \n\nSo far these functions can be used with several different types of Python objects: `str`, `list`, `dictionary`, pandas' `dataframe`, geopandas `geodataframe` , matplotlib's `figure`, and plotly image object. These can be written either as `.txt`, `.json`, `geojson` , `.png` or `.eps` files, based upon type of the input object and filename's ending chosen by the user. Here are simple instances of these python objects to play with:\n\n```python\n### Python \"str\" object\nstring_object =  \"string content\"\n### Python \"list\" object\nlist_object = ['a', 'b', 'c', 'd']\n### Python \"dictionary\" object\ndict_object = {\"a\" : 1, \"b\" : 2, \"c\":3 }\n### Pandas dataframe object\nimport pandas as pd\ndataframe_object = pd.DataFrame([(\"a1\", \"b1\", \"c1\"), (\"a2\", \"b2\", \"c2\")], columns=[\"a\", \"b\", \"c\"]) \n### Matplotlib figure object\nimport matplotlib.pyplot as plt\nfigure_object = plt.figure() # generate object\nplt.plot(range(10)) # fill it by plotted values\n### (the same also works for plotly figures)\n```\n\nThe simplest example is once we want to write a string object into a textfile located at our home folder (or shared folder)\n\n```python\ns.write_file(\"test_string.txt\", string_object)\n```\n\nIn the case  that everything is fine, you will receive following message:\n\n```\n\u003e Your \u003cclass 'str'\u003e object has been succefully written as \"https://sciencedata.dk/files/test_string.txt\"\n```\n\nHowever, there is a couple of things which might go wrong - You can choose an unsupported python object, a non-existent path or unsupported file format. The function captures some of these cases. For instance, once you run `sddk.write_file(\"nonexistent_folder/filename.wtf\", string_object, conf)`, you will be interactively asked for corrections. First: the function checks whether the path is correct. When corrected to an existent folder (here it is \"personal_folder\"), the function further inspect whether it has known ending (i.e. `txt`, `json`, `feather`, or `png`). If not, it asks you interactively for correction. Third, it checks whether the folder already contain a file of the same name (to avoid unintended overwritting), and if yes, asks you what to do. Finally, it prints out where you can find your file and what type of object it encapsulates. \n\n```\n\u003e\u003e\u003e The path is not valid. Try different path and filename: textfile.wtf\n\u003e\u003e\u003e Unsupported file format. Type either \"txt\", \"json\", or \"png\"\n\u003e\u003e\u003e A file with the same name (\"textfile.txt\") already exists in this location.\nPress Enter to overwrite it or choose different path and filename: textfile2.txt\n```\n\nThe same function works with dictionaries, lists, Matplotlib's figures and especially Pandas' dataframes. Pandas' dataframe is our favorite. We send there and back 1GB+ dataframes as json or feather files on a daily basis. See examples below.\n\n## read_file()\n\nOn the other side, we have the function `s.read_file(path_and_filename, object_type)`, which enables us to to read our files back to python as chosen python objects. Currently, the function can read  textfiles as strings, json files as either dictionary, lists or Pandas's dataframes, and geojson files as geopandas GeoDataFrames. You have to specify the type of object as the second argument, the values are either \"str\", \"list\", \"dict\", \"df\" or \"gdf\" within quotation marks, like in these examples. If you omit this, the file is parsed as pandas DataFrame.\n\n```python\nstring_object = s.read_file(\"test_string.txt\", \"str\")\nstring_object\n\u003e\u003e\u003e 'string content'\n```\n\n```python\nlist_object = s.read_file(\"simple_list.json\", \"list\")\nlist_object\n\u003e\u003e\u003e ['a', 'b', 'c', 'd']\n```\n\n```python\ndict_object = s.read_file(\"simple_dict.json\", \"dict\")\ndict_object\n\u003e\u003e\u003e {'a': 1, 'b': 2, 'c': 3}\n```\n\n```python\ndataframe_object = s.read_file(\"simple_df.json\")\ndataframe_object\n\u003e\u003e\u003e     a   b   c\n0  a1  b1  c1\n1  a2  b2  c2\n```\n\n## Examples\n\n### pandas.DataFrame to `.json` and back\n\n\n```python\nimport pandas as pd\ndataframe_object = pd.DataFrame([(\"a1\", \"b1\", \"c1\"), (\"a2\", \"b2\", \"c2\")], columns=[\"a\", \"b\", \"c\"])\ndataframe_object\n```\n\n\u003ctable border=\"1\" class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003ea1\u003c/td\u003e\n      \u003ctd\u003eb1\u003c/td\u003e\n      \u003ctd\u003ec1\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003ea2\u003c/td\u003e\n      \u003ctd\u003eb2\u003c/td\u003e\n      \u003ctd\u003ec2\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\n\n```python\ns.write_file(\"simple_dataframe.json\", dataframe_object)\n\u003e Your \u003cclass 'pandas.core.frame.DataFrame'\u003e object has been succefully written as \"https://sciencedata.dk/files/simple_dataframe.json\"\n```\n\n```python\n# read the file back as a new object \"df_back\"\ndf_back = s.read_file(\"simple_dataframe.json\")\ndf_back\n```\n\n\u003ctable border=\"1\" class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003ea1\u003c/td\u003e\n      \u003ctd\u003eb1\u003c/td\u003e\n      \u003ctd\u003ec1\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003ea2\u003c/td\u003e\n      \u003ctd\u003eb2\u003c/td\u003e\n      \u003ctd\u003ec2\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\nReading a larger dataframe file from a public folder:\n\n\n```python\n%%time\nEDH_sample = s.read_file(\"https://sciencedata.dk/public/8fe7d59de1eafe5f8eaebc0044534606/EDH_sample.json\")\nEDH_sample.head(5)\n# alternatively, you can use it by setting the three arguments (it is just a matter of taste):\n# EDH_sample = sddk.read_file(\"EDH_sample.json\", \"df\", public_folder=\"8fe7d59de1eafe5f8eaebc0044534606\")\nEDH_sample.head(5)\n# this is an example usage of public folder, see below for explanation.\n```\n\n\n\n\u003ctable border=\"1\" class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ediplomatic_text\u003c/th\u003e\n      \u003cth\u003eliterature\u003c/th\u003e\n      \u003cth\u003etrismegistos_uri\u003c/th\u003e\n      \u003cth\u003eid\u003c/th\u003e\n      \u003cth\u003efindspot_ancient\u003c/th\u003e\n      \u003cth\u003enot_before\u003c/th\u003e\n      \u003cth\u003etype_of_inscription\u003c/th\u003e\n      \u003cth\u003ework_status\u003c/th\u003e\n      \u003cth\u003eedh_geography_uri\u003c/th\u003e\n      \u003cth\u003enot_after\u003c/th\u003e\n      \u003cth\u003e...\u003c/th\u003e\n      \u003cth\u003eexternal_image_uris\u003c/th\u003e\n      \u003cth\u003ereligion\u003c/th\u003e\n      \u003cth\u003efotos\u003c/th\u003e\n      \u003cth\u003egeography\u003c/th\u003e\n      \u003cth\u003emilitary\u003c/th\u003e\n      \u003cth\u003esocial_economic_legal_history\u003c/th\u003e\n      \u003cth\u003ecoordinates\u003c/th\u003e\n      \u003cth\u003etext_cleaned\u003c/th\u003e\n      \u003cth\u003eorigdate_text\u003c/th\u003e\n      \u003cth\u003eobjecttype\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003eD M / NONIAE P F OPTATAE / ET C IVLIO ARTEMONI...\u003c/td\u003e\n      \u003ctd\u003eAE 1983, 0192.; M. Annecchino, Puteoli 4/5, 19...\u003c/td\u003e\n      \u003ctd\u003ehttps://www.trismegistos.org/text/251193\u003c/td\u003e\n      \u003ctd\u003eHD000001\u003c/td\u003e\n      \u003ctd\u003eCumae, bei\u003c/td\u003e\n      \u003ctd\u003e0071\u003c/td\u003e\n      \u003ctd\u003eepitaph\u003c/td\u003e\n      \u003ctd\u003eprovisional\u003c/td\u003e\n      \u003ctd\u003ehttps://edh-www.adw.uni-heidelberg.de/edh/geog...\u003c/td\u003e\n      \u003ctd\u003e0130\u003c/td\u003e\n      \u003ctd\u003e...\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003e40.8471577,14.0550756\u003c/td\u003e\n      \u003ctd\u003eDis Manibus Noniae Publi filiae Optatae et Cai...\u003c/td\u003e\n      \u003ctd\u003e71 AD – 130 AD\u003c/td\u003e\n      \u003ctd\u003e[Tafel, 257]\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003eC SEXTIVS PARIS / QVI VIXIT / ANNIS LXX\u003c/td\u003e\n      \u003ctd\u003eAE 1983, 0080. (A); A. Ferrua, RAL 36, 1981, 1...\u003c/td\u003e\n      \u003ctd\u003ehttps://www.trismegistos.org/text/265631\u003c/td\u003e\n      \u003ctd\u003eHD000002\u003c/td\u003e\n      \u003ctd\u003eRoma\u003c/td\u003e\n      \u003ctd\u003e0051\u003c/td\u003e\n      \u003ctd\u003eepitaph\u003c/td\u003e\n      \u003ctd\u003eno image\u003c/td\u003e\n      \u003ctd\u003ehttps://edh-www.adw.uni-heidelberg.de/edh/geog...\u003c/td\u003e\n      \u003ctd\u003e0200\u003c/td\u003e\n      \u003ctd\u003e...\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003e41.895466,12.482324\u003c/td\u003e\n      \u003ctd\u003eCaius Sextius Paris qui vixit annis LXX       ...\u003c/td\u003e\n      \u003ctd\u003e51 AD – 200 AD\u003c/td\u003e\n      \u003ctd\u003e[Tafel, 257]\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e[ ]VMMIO [ ] / [ ]ISENNA[ ] / [ ] XV[ ] / [ ] / [\u003c/td\u003e\n      \u003ctd\u003eAE 1983, 0518. (B); J. González, ZPE 52, 1983,...\u003c/td\u003e\n      \u003ctd\u003ehttps://www.trismegistos.org/text/220675\u003c/td\u003e\n      \u003ctd\u003eHD000003\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003e0131\u003c/td\u003e\n      \u003ctd\u003ehonorific inscription\u003c/td\u003e\n      \u003ctd\u003eprovisional\u003c/td\u003e\n      \u003ctd\u003ehttps://edh-www.adw.uni-heidelberg.de/edh/geog...\u003c/td\u003e\n      \u003ctd\u003e0170\u003c/td\u003e\n      \u003ctd\u003e...\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003e37.37281,-6.04589\u003c/td\u003e\n      \u003ctd\u003ePublio Mummio Publi filio Galeria Sisennae Rut...\u003c/td\u003e\n      \u003ctd\u003e131 AD – 170 AD\u003c/td\u003e\n      \u003ctd\u003e[Statuenbasis, 57]\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e3\u003c/th\u003e\n      \u003ctd\u003e[ ]AVS[ ]LLA / M PORCI NIGRI SER / DOMINAE VEN...\u003c/td\u003e\n      \u003ctd\u003eAE 1983, 0533. (B); A.U. Stylow, Gerión 1, 198...\u003c/td\u003e\n      \u003ctd\u003ehttps://www.trismegistos.org/text/222102\u003c/td\u003e\n      \u003ctd\u003eHD000004\u003c/td\u003e\n      \u003ctd\u003eIpolcobulcula\u003c/td\u003e\n      \u003ctd\u003e0151\u003c/td\u003e\n      \u003ctd\u003evotive inscription\u003c/td\u003e\n      \u003ctd\u003echecked with photo\u003c/td\u003e\n      \u003ctd\u003ehttps://edh-www.adw.uni-heidelberg.de/edh/geog...\u003c/td\u003e\n      \u003ctd\u003e0200\u003c/td\u003e\n      \u003ctd\u003e...\u003c/td\u003e\n      \u003ctd\u003e[http://cil-old.bbaw.de/test06/bilder/datenban...\u003c/td\u003e\n      \u003ctd\u003enames of pagan deities\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003e37.4442,-4.27471\u003c/td\u003e\n      \u003ctd\u003eAVSLLA Marci Porci Nigri serva dominae Veneri ...\u003c/td\u003e\n      \u003ctd\u003e151 AD – 200 AD\u003c/td\u003e\n      \u003ctd\u003e[Altar, 29]\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e4\u003c/th\u003e\n      \u003ctd\u003e[ ] L SVCCESSVS / [ ] L L IRENAEVS / [ ] C L T...\u003c/td\u003e\n      \u003ctd\u003eAE 1983, 0078. (B); A. Ferrua, RAL 36, 1981, 1...\u003c/td\u003e\n      \u003ctd\u003ehttps://www.trismegistos.org/text/265629\u003c/td\u003e\n      \u003ctd\u003eHD000005\u003c/td\u003e\n      \u003ctd\u003eRoma\u003c/td\u003e\n      \u003ctd\u003e0001\u003c/td\u003e\n      \u003ctd\u003eepitaph\u003c/td\u003e\n      \u003ctd\u003eno image\u003c/td\u003e\n      \u003ctd\u003ehttps://edh-www.adw.uni-heidelberg.de/edh/geog...\u003c/td\u003e\n      \u003ctd\u003e0200\u003c/td\u003e\n      \u003ctd\u003e...\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003e41.895466,12.482324\u003c/td\u003e\n      \u003ctd\u003elibertus Successus  Luci libertus Irenaeus  C...\u003c/td\u003e\n      \u003ctd\u003e1 AD – 200 AD\u003c/td\u003e\n      \u003ctd\u003e[Stele, 250]\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e5 rows × 40 columns\u003c/p\u003e\n\n\n\n### pandas.DataFrame to `.feather` and back\n\nThis might cause issues because of the way how pandas implements pyarrow and feather. To work with feather, check that you have installed a correct version of `pyarrow` package:\n\n```python\nimport pyarrow\npyarrow.__version__\n```\n\nYou need 0.17.1 or higher.  Google colab comes with 0.14.1 by default, so you have to upgrade:\n\n```python\n!pip install pyarrow --upgrade\n```\n\nand restart your runtime.\n\nOriginally,  sddk 1.9-2.4 specified the requirement `pyarrow\u003e=0.17.1` , but it produced a lot of conflicts during an installation on Google colab, since there many other packages requiring pyarrow==0.14.1. Therefore, pyarrow is currently bypassed.\n\n\n```python\ns.write_file(\"simple_dataframe.feather\", dataframe_object)\n\u003e Your \u003cclass 'pandas.core.frame.DataFrame'\u003e object has been succefully written as \"https://sciencedata.dk/files/simple_dataframe.feather\"\n```\n\n```python\ns.read_file(\"simple_dataframe.feather\")\n```\n\n\n\n\u003ctable border=\"1\" class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003ea1\u003c/td\u003e\n      \u003ctd\u003eb1\u003c/td\u003e\n      \u003ctd\u003ec1\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003ea2\u003c/td\u003e\n      \u003ctd\u003eb2\u003c/td\u003e\n      \u003ctd\u003ec2\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\n\n\nReading a larger file from public folder\n\n\n```python\n%%time\nEDH_sample = s.read_file(\"https://sciencedata.dk/public/8fe7d59de1eafe5f8eaebc0044534606/EDH_sample.feather\")\nEDH_sample.head(5)\n# alternative solution:\n# EDH_sample = s.read_file(\"EDH_sample.feather\", \"df\", \"8fe7d59de1eafe5f8eaebc0044534606\")\nEDH_sample.head(5)\n```\n\n\n\n\u003ctable border=\"1\" class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ediplomatic_text\u003c/th\u003e\n      \u003cth\u003eliterature\u003c/th\u003e\n      \u003cth\u003etrismegistos_uri\u003c/th\u003e\n      \u003cth\u003eid\u003c/th\u003e\n      \u003cth\u003efindspot_ancient\u003c/th\u003e\n      \u003cth\u003enot_before\u003c/th\u003e\n      \u003cth\u003etype_of_inscription\u003c/th\u003e\n      \u003cth\u003ework_status\u003c/th\u003e\n      \u003cth\u003eedh_geography_uri\u003c/th\u003e\n      \u003cth\u003enot_after\u003c/th\u003e\n      \u003cth\u003e...\u003c/th\u003e\n      \u003cth\u003eexternal_image_uris\u003c/th\u003e\n      \u003cth\u003ereligion\u003c/th\u003e\n      \u003cth\u003efotos\u003c/th\u003e\n      \u003cth\u003egeography\u003c/th\u003e\n      \u003cth\u003emilitary\u003c/th\u003e\n      \u003cth\u003esocial_economic_legal_history\u003c/th\u003e\n      \u003cth\u003ecoordinates\u003c/th\u003e\n      \u003cth\u003etext_cleaned\u003c/th\u003e\n      \u003cth\u003eorigdate_text\u003c/th\u003e\n      \u003cth\u003eobjecttype\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003eD M / NONIAE P F OPTATAE / ET C IVLIO ARTEMONI...\u003c/td\u003e\n      \u003ctd\u003eAE 1983, 0192.; M. Annecchino, Puteoli 4/5, 19...\u003c/td\u003e\n      \u003ctd\u003ehttps://www.trismegistos.org/text/251193\u003c/td\u003e\n      \u003ctd\u003eHD000001\u003c/td\u003e\n      \u003ctd\u003eCumae, bei\u003c/td\u003e\n      \u003ctd\u003e0071\u003c/td\u003e\n      \u003ctd\u003eepitaph\u003c/td\u003e\n      \u003ctd\u003eprovisional\u003c/td\u003e\n      \u003ctd\u003ehttps://edh-www.adw.uni-heidelberg.de/edh/geog...\u003c/td\u003e\n      \u003ctd\u003e0130\u003c/td\u003e\n      \u003ctd\u003e...\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003e40.8471577,14.0550756\u003c/td\u003e\n      \u003ctd\u003eDis Manibus Noniae Publi filiae Optatae et Cai...\u003c/td\u003e\n      \u003ctd\u003e71 AD – 130 AD\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003eC SEXTIVS PARIS / QVI VIXIT / ANNIS LXX\u003c/td\u003e\n      \u003ctd\u003eAE 1983, 0080. (A); A. Ferrua, RAL 36, 1981, 1...\u003c/td\u003e\n      \u003ctd\u003ehttps://www.trismegistos.org/text/265631\u003c/td\u003e\n      \u003ctd\u003eHD000002\u003c/td\u003e\n      \u003ctd\u003eRoma\u003c/td\u003e\n      \u003ctd\u003e0051\u003c/td\u003e\n      \u003ctd\u003eepitaph\u003c/td\u003e\n      \u003ctd\u003eno image\u003c/td\u003e\n      \u003ctd\u003ehttps://edh-www.adw.uni-heidelberg.de/edh/geog...\u003c/td\u003e\n      \u003ctd\u003e0200\u003c/td\u003e\n      \u003ctd\u003e...\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003e41.895466,12.482324\u003c/td\u003e\n      \u003ctd\u003eCaius Sextius Paris qui vixit annis LXX       ...\u003c/td\u003e\n      \u003ctd\u003e51 AD – 200 AD\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e[ ]VMMIO [ ] / [ ]ISENNA[ ] / [ ] XV[ ] / [ ] / [\u003c/td\u003e\n      \u003ctd\u003eAE 1983, 0518. (B); J. González, ZPE 52, 1983,...\u003c/td\u003e\n      \u003ctd\u003ehttps://www.trismegistos.org/text/220675\u003c/td\u003e\n      \u003ctd\u003eHD000003\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003e0131\u003c/td\u003e\n      \u003ctd\u003ehonorific inscription\u003c/td\u003e\n      \u003ctd\u003eprovisional\u003c/td\u003e\n      \u003ctd\u003ehttps://edh-www.adw.uni-heidelberg.de/edh/geog...\u003c/td\u003e\n      \u003ctd\u003e0170\u003c/td\u003e\n      \u003ctd\u003e...\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003e37.37281,-6.04589\u003c/td\u003e\n      \u003ctd\u003ePublio Mummio Publi filio Galeria Sisennae Rut...\u003c/td\u003e\n      \u003ctd\u003e131 AD – 170 AD\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e3\u003c/th\u003e\n      \u003ctd\u003e[ ]AVS[ ]LLA / M PORCI NIGRI SER / DOMINAE VEN...\u003c/td\u003e\n      \u003ctd\u003eAE 1983, 0533. (B); A.U. Stylow, Gerión 1, 198...\u003c/td\u003e\n      \u003ctd\u003ehttps://www.trismegistos.org/text/222102\u003c/td\u003e\n      \u003ctd\u003eHD000004\u003c/td\u003e\n      \u003ctd\u003eIpolcobulcula\u003c/td\u003e\n      \u003ctd\u003e0151\u003c/td\u003e\n      \u003ctd\u003evotive inscription\u003c/td\u003e\n      \u003ctd\u003echecked with photo\u003c/td\u003e\n      \u003ctd\u003ehttps://edh-www.adw.uni-heidelberg.de/edh/geog...\u003c/td\u003e\n      \u003ctd\u003e0200\u003c/td\u003e\n      \u003ctd\u003e...\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003enames of pagan deities\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003e37.4442,-4.27471\u003c/td\u003e\n      \u003ctd\u003eAVSLLA Marci Porci Nigri serva dominae Veneri ...\u003c/td\u003e\n      \u003ctd\u003e151 AD – 200 AD\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e4\u003c/th\u003e\n      \u003ctd\u003e[ ] L SVCCESSVS / [ ] L L IRENAEVS / [ ] C L T...\u003c/td\u003e\n      \u003ctd\u003eAE 1983, 0078. (B); A. Ferrua, RAL 36, 1981, 1...\u003c/td\u003e\n      \u003ctd\u003ehttps://www.trismegistos.org/text/265629\u003c/td\u003e\n      \u003ctd\u003eHD000005\u003c/td\u003e\n      \u003ctd\u003eRoma\u003c/td\u003e\n      \u003ctd\u003e0001\u003c/td\u003e\n      \u003ctd\u003eepitaph\u003c/td\u003e\n      \u003ctd\u003eno image\u003c/td\u003e\n      \u003ctd\u003ehttps://edh-www.adw.uni-heidelberg.de/edh/geog...\u003c/td\u003e\n      \u003ctd\u003e0200\u003c/td\u003e\n      \u003ctd\u003e...\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003e41.895466,12.482324\u003c/td\u003e\n      \u003ctd\u003elibertus Successus  Luci libertus Irenaeus  C...\u003c/td\u003e\n      \u003ctd\u003e1 AD – 200 AD\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e5 rows × 40 columns\u003c/p\u003e\n\n### pandas.DataFrame to `.csv` and back \n\n\n```python\nimport pandas as pd\ndataframe_object = pd.DataFrame([(\"a1\", \"b1\", \"c1\"), (\"a2\", \"b2\", \"c2\")], columns=[\"a\", \"b\", \"c\"]) \ndataframe_object\n```\n\n\n\n\u003ctable border=\"1\" class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003ea1\u003c/td\u003e\n      \u003ctd\u003eb1\u003c/td\u003e\n      \u003ctd\u003ec1\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003ea2\u003c/td\u003e\n      \u003ctd\u003eb2\u003c/td\u003e\n      \u003ctd\u003ec2\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\n\n\n\n```python\ns.write_file(\"simple_dataframe.csv\", dataframe_object)\n\u003e Your \u003cclass 'pandas.core.frame.DataFrame'\u003e object has been succefully written as \"https://sciencedata.dk/files/simple_dataframe.csv\"\n```\n\n```python\ns.read_file(\"simple_dataframe.csv\")\n```\n\n\n\n\u003ctable border=\"1\" class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003ea1\u003c/td\u003e\n      \u003ctd\u003eb1\u003c/td\u003e\n      \u003ctd\u003ec1\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003ea2\u003c/td\u003e\n      \u003ctd\u003eb2\u003c/td\u003e\n      \u003ctd\u003ec2\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\n## list_filenames()\n\nThis function enables you to list all files within a directory. You can specify the directory, type of the file you are interested in and the conf variable. For instance, the function belows returns all JSON files within your main directory.\n\n```python\n s.list_filenames(filetype=\"json\")\n```\n\n## Personal, shared and public folders\n\n**Shared in and out**\n\nOne of the main strength of the sciencedata.dk are collaborative features, namely the way you can manage its **shared** and **public** folders.\n\n**Shared** folders always have one of two forms: either (1) a shared folder *you* share with some users or (2) a shared folder someone else shares with you. \n\nEach shared folder has its **owner**. The folders  are located in their owner's  personal space and can be easily accessed  from there like from any other personal folder. However, in the case of shared folders you do not own (i.e. which were shared with you by someone else) you also need to know the username of their owner. \n\nOne of the key features of the **sddk** package is that it enables you to access both types of shared folders **using exactly the same syntax**, regardless you are their owner or not. This enables that all members of a team accessing a folder owned and shared by one member can you use the same code. The function just checks both options and chooses what works.\n\nFor instance, a project member with username `member1@inst.org` created a folder in his personal space called `team_folder`,  uploaded there a file called `textfile.txt`, and shared the folder with his teammates with usernames `member2@inst.org` and `member3@inst.org`. All of them can now access the file using the same series of commands:\n\n**Public files and folders**\n\nSciencedata.dk also enables to produce public files and folders. These files and folders might be accessed using `sddk.read_file()` function even without having sciencedata.dk account. You just have to know  share link code of the file or folder. To read a public file, you can use:\n\n```python\npublic_file_code = \"3e0a55a4182de313e04523360cecd015\"\ngospels_cleaned = sddk.read_file(\"https://sciencedata.dk/public/\" + public_file_code, \"dict\")\n# of course, you can write it directly:\n# gospels_cleaned = s.read_file(\"https://sciencedata.dk/public/3e0a55a4182de313e04523360cecd015\", \"dict\")\n```\n\nPublic files can be read even if you are not logged into a session at the moment (using `sddk.read_file()` instead of `s.read_file()`)\n\n```python\ngospels_cleaned = sddk.read_file(\"https://sciencedata.dk/public/\" + public_file_code, \"dict\")\n```\n\nTo read a specific file within a public folder, you can use the code below, i.e. you can replace the `conf` parameter by sharing code of the public folder.\n\n```python\npublic_folder_code = \"31b393e2afe1ee96ce81869c7efe18cb\"\nc_aristotelicum = sddk.read_file(\"c_aristotelicum.json\", \"df\", public_folder_code)\n```\n\n## write_file()\n\nThe most important components of the package are two functions: `write_file(path_and_filename, python_object, conf)` and `read_file(path_and_filename, type_of_object, conf)`. \n\nSo far these functions can be used with several different types of Python objects: `str`, `list`, `dictionary`, pandas' `dataframe`, geopandas `geodataframe` and matplotlib's `figure`. These can be written either as `.txt`, `.json`, `geojson` , `.png` or `.eps` files, based upin type of the input object a d filename's ending chosen by the user. Here are simple instances of these python objects to play with:\n\n```python\n### Python \"str\" object\nstring_object =  \"string content\"\n### Python \"list\" object\nlist_object = ['a', 'b', 'c', 'd']\n### Python \"dictionary\" object\ndict_object = {\"a\" : 1, \"b\" : 2, \"c\":3 }\n### Pandas dataframe object\nimport pandas as pd\ndataframe_object = pd.DataFrame([(\"a1\", \"b1\", \"c1\"), (\"a2\", \"b2\", \"c2\")], columns=[\"a\", \"b\", \"c\"]) \n### Matplotlib figure object\nimport matplotlib.pyplot as plt\nfigure_object = plt.figure() # generate object\nplt.plot(range(10)) # fill it by plotted values\n### (the same also works for plotly figures)\n```\n\nThe simplest example is once we want to write a string object into a textfile located at our home folder (Remember, that since the configuration this home folder is contained within the `sddk_url` variable ) \n\n```python\nsddk.write_file(\"test_string.txt\", string_object, conf)\n```\n\nIn the case  that everything is fine, you will receive following message:\n\n```\n\u003e Your \u003cclass 'str'\u003e object has been succefully written as \"https://sciencedata.dk/files/test_string.txt\"\n```\n\nHowever, there is a couple of things which might go wrong - You can choose an unsupported python object, a non-existent path or unsupported file format. The function captures some of these cases. For instance, once you run `sddk.write_file(\"nonexistent_folder/filename.wtf\", string_object, conf)`, you will be interactively asked for corrections. First: the function checks whether the path is correct. When corrected to an existent folder (here it is \"personal_folder\"), the function further inspect whether it has known ending (i.e. `txt`, `json`, `feather`, or `png`). If not, it asks you interactively for correction. Third, it checks whether the folder already contain a file of the same name (to avoid unintended overwritting), and if yes, asks you what to do. Finally, it prints out where you can find your file and what type of object it encapsulates. \n\n```\n\u003e\u003e\u003e The path is not valid. Try different path and filename: textfile.wtf\n\u003e\u003e\u003e Unsupported file format. Type either \"txt\", \"json\", or \"png\": txt\n\u003e\u003e\u003e A file with the same name (\"textfile.txt\") already exists in this location.\nPress Enter to overwrite it or choose different path and filename: textfile2.txt\n\u003e\u003e\u003e Your \u003cclass 'str'\u003e object has been succefully written as \"https://sciencedata.dk/files/textfile2.txt\"\n```\n\nThe same function works with dictionaries, lists, Matplotlib's figures and especially Pandas' dataframes. Pandas' dataframe is my favorite. I send there and back 1GB+ dataframes as json or feather files on a daily basis. See examples below\n\n## read_file()\n\nOn the other side, we have the function `sddk.read_file(path_and_filename, object_type)`, which enables us to to read our files back to python as chosen python objects. Currently, the function can read only textfiles as strings, and json files as either dictionary, lists or Pandas's dataframes. You have to specify the type of object as the second argument, the values are either \"str\", \"list\", \"dict\", \"df\" or \"gdf\" within quotation marks, like in these examples:\n\n```python\nstring_object = read_file(\"test_string.txt\", \"str\", conf)\nstring_object\n\u003e\u003e\u003e 'string content'\n```\n\n```python\nlist_object = read_file(\"simple_list.json\", \"list\", conf)\nlist_object\n\u003e\u003e\u003e ['a', 'b', 'c', 'd']\n```\n\n```python\ndict_object = read_file(\"simple_dict.json\", \"dict\", conf)\ndict_object\n\u003e\u003e\u003e {'a': 1, 'b': 2, 'c': 3}\n```\n\n```python\ndataframe_object = read_file(\"simple_df.json\", \"df\", conf)\n\u003e\u003e\u003e     a   b   c\n0  a1  b1  c1\n1  a2  b2  c2\n```\n\n## Examples\n\n### pandas.DataFrame to `.json` and back\n\n\n```python\nimport pandas as pd\ndataframe_object = pd.DataFrame([(\"a1\", \"b1\", \"c1\"), (\"a2\", \"b2\", \"c2\")], columns=[\"a\", \"b\", \"c\"])\ndataframe_object\n```\n\n\u003ctable border=\"1\" class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003ea1\u003c/td\u003e\n      \u003ctd\u003eb1\u003c/td\u003e\n      \u003ctd\u003ec1\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003ea2\u003c/td\u003e\n      \u003ctd\u003eb2\u003c/td\u003e\n      \u003ctd\u003ec2\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\n\n\n```python\nsddk.write_file(\"simple_dataframe.json\", dataframe_object, conf)\n\u003e Your \u003cclass 'pandas.core.frame.DataFrame'\u003e object has been succefully written as \"https://sciencedata.dk/files/simple_dataframe.json\"\n```\n\n```python\nsddk.read_file(\"simple_dataframe.json\", \"df\", conf)\n```\n\n\n\n\u003ctable border=\"1\" class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003ea1\u003c/td\u003e\n      \u003ctd\u003eb1\u003c/td\u003e\n      \u003ctd\u003ec1\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003ea2\u003c/td\u003e\n      \u003ctd\u003eb2\u003c/td\u003e\n      \u003ctd\u003ec2\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\nReading a larger file from a public folder\n\n\n```python\n%%time\nEDH_sample = sddk.read_file(\"EDH_sample.json\", \"df\", \"8fe7d59de1eafe5f8eaebc0044534606\")\nEDH_sample.head(5)\n# this is an example usage of public folder, see below for explanation.\n```\n\n\n\n\u003ctable border=\"1\" class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ediplomatic_text\u003c/th\u003e\n      \u003cth\u003eliterature\u003c/th\u003e\n      \u003cth\u003etrismegistos_uri\u003c/th\u003e\n      \u003cth\u003eid\u003c/th\u003e\n      \u003cth\u003efindspot_ancient\u003c/th\u003e\n      \u003cth\u003enot_before\u003c/th\u003e\n      \u003cth\u003etype_of_inscription\u003c/th\u003e\n      \u003cth\u003ework_status\u003c/th\u003e\n      \u003cth\u003eedh_geography_uri\u003c/th\u003e\n      \u003cth\u003enot_after\u003c/th\u003e\n      \u003cth\u003e...\u003c/th\u003e\n      \u003cth\u003eexternal_image_uris\u003c/th\u003e\n      \u003cth\u003ereligion\u003c/th\u003e\n      \u003cth\u003efotos\u003c/th\u003e\n      \u003cth\u003egeography\u003c/th\u003e\n      \u003cth\u003emilitary\u003c/th\u003e\n      \u003cth\u003esocial_economic_legal_history\u003c/th\u003e\n      \u003cth\u003ecoordinates\u003c/th\u003e\n      \u003cth\u003etext_cleaned\u003c/th\u003e\n      \u003cth\u003eorigdate_text\u003c/th\u003e\n      \u003cth\u003eobjecttype\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003eD M / NONIAE P F OPTATAE / ET C IVLIO ARTEMONI...\u003c/td\u003e\n      \u003ctd\u003eAE 1983, 0192.; M. Annecchino, Puteoli 4/5, 19...\u003c/td\u003e\n      \u003ctd\u003ehttps://www.trismegistos.org/text/251193\u003c/td\u003e\n      \u003ctd\u003eHD000001\u003c/td\u003e\n      \u003ctd\u003eCumae, bei\u003c/td\u003e\n      \u003ctd\u003e0071\u003c/td\u003e\n      \u003ctd\u003eepitaph\u003c/td\u003e\n      \u003ctd\u003eprovisional\u003c/td\u003e\n      \u003ctd\u003ehttps://edh-www.adw.uni-heidelberg.de/edh/geog...\u003c/td\u003e\n      \u003ctd\u003e0130\u003c/td\u003e\n      \u003ctd\u003e...\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003e40.8471577,14.0550756\u003c/td\u003e\n      \u003ctd\u003eDis Manibus Noniae Publi filiae Optatae et Cai...\u003c/td\u003e\n      \u003ctd\u003e71 AD – 130 AD\u003c/td\u003e\n      \u003ctd\u003e[Tafel, 257]\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003eC SEXTIVS PARIS / QVI VIXIT / ANNIS LXX\u003c/td\u003e\n      \u003ctd\u003eAE 1983, 0080. (A); A. Ferrua, RAL 36, 1981, 1...\u003c/td\u003e\n      \u003ctd\u003ehttps://www.trismegistos.org/text/265631\u003c/td\u003e\n      \u003ctd\u003eHD000002\u003c/td\u003e\n      \u003ctd\u003eRoma\u003c/td\u003e\n      \u003ctd\u003e0051\u003c/td\u003e\n      \u003ctd\u003eepitaph\u003c/td\u003e\n      \u003ctd\u003eno image\u003c/td\u003e\n      \u003ctd\u003ehttps://edh-www.adw.uni-heidelberg.de/edh/geog...\u003c/td\u003e\n      \u003ctd\u003e0200\u003c/td\u003e\n      \u003ctd\u003e...\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003e41.895466,12.482324\u003c/td\u003e\n      \u003ctd\u003eCaius Sextius Paris qui vixit annis LXX       ...\u003c/td\u003e\n      \u003ctd\u003e51 AD – 200 AD\u003c/td\u003e\n      \u003ctd\u003e[Tafel, 257]\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e[ ]VMMIO [ ] / [ ]ISENNA[ ] / [ ] XV[ ] / [ ] / [\u003c/td\u003e\n      \u003ctd\u003eAE 1983, 0518. (B); J. González, ZPE 52, 1983,...\u003c/td\u003e\n      \u003ctd\u003ehttps://www.trismegistos.org/text/220675\u003c/td\u003e\n      \u003ctd\u003eHD000003\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003e0131\u003c/td\u003e\n      \u003ctd\u003ehonorific inscription\u003c/td\u003e\n      \u003ctd\u003eprovisional\u003c/td\u003e\n      \u003ctd\u003ehttps://edh-www.adw.uni-heidelberg.de/edh/geog...\u003c/td\u003e\n      \u003ctd\u003e0170\u003c/td\u003e\n      \u003ctd\u003e...\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003e37.37281,-6.04589\u003c/td\u003e\n      \u003ctd\u003ePublio Mummio Publi filio Galeria Sisennae Rut...\u003c/td\u003e\n      \u003ctd\u003e131 AD – 170 AD\u003c/td\u003e\n      \u003ctd\u003e[Statuenbasis, 57]\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e3\u003c/th\u003e\n      \u003ctd\u003e[ ]AVS[ ]LLA / M PORCI NIGRI SER / DOMINAE VEN...\u003c/td\u003e\n      \u003ctd\u003eAE 1983, 0533. (B); A.U. Stylow, Gerión 1, 198...\u003c/td\u003e\n      \u003ctd\u003ehttps://www.trismegistos.org/text/222102\u003c/td\u003e\n      \u003ctd\u003eHD000004\u003c/td\u003e\n      \u003ctd\u003eIpolcobulcula\u003c/td\u003e\n      \u003ctd\u003e0151\u003c/td\u003e\n      \u003ctd\u003evotive inscription\u003c/td\u003e\n      \u003ctd\u003echecked with photo\u003c/td\u003e\n      \u003ctd\u003ehttps://edh-www.adw.uni-heidelberg.de/edh/geog...\u003c/td\u003e\n      \u003ctd\u003e0200\u003c/td\u003e\n      \u003ctd\u003e...\u003c/td\u003e\n      \u003ctd\u003e[http://cil-old.bbaw.de/test06/bilder/datenban...\u003c/td\u003e\n      \u003ctd\u003enames of pagan deities\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003e37.4442,-4.27471\u003c/td\u003e\n      \u003ctd\u003eAVSLLA Marci Porci Nigri serva dominae Veneri ...\u003c/td\u003e\n      \u003ctd\u003e151 AD – 200 AD\u003c/td\u003e\n      \u003ctd\u003e[Altar, 29]\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e4\u003c/th\u003e\n      \u003ctd\u003e[ ] L SVCCESSVS / [ ] L L IRENAEVS / [ ] C L T...\u003c/td\u003e\n      \u003ctd\u003eAE 1983, 0078. (B); A. Ferrua, RAL 36, 1981, 1...\u003c/td\u003e\n      \u003ctd\u003ehttps://www.trismegistos.org/text/265629\u003c/td\u003e\n      \u003ctd\u003eHD000005\u003c/td\u003e\n      \u003ctd\u003eRoma\u003c/td\u003e\n      \u003ctd\u003e0001\u003c/td\u003e\n      \u003ctd\u003eepitaph\u003c/td\u003e\n      \u003ctd\u003eno image\u003c/td\u003e\n      \u003ctd\u003ehttps://edh-www.adw.uni-heidelberg.de/edh/geog...\u003c/td\u003e\n      \u003ctd\u003e0200\u003c/td\u003e\n      \u003ctd\u003e...\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003e41.895466,12.482324\u003c/td\u003e\n      \u003ctd\u003elibertus Successus  Luci libertus Irenaeus  C...\u003c/td\u003e\n      \u003ctd\u003e1 AD – 200 AD\u003c/td\u003e\n      \u003ctd\u003e[Stele, 250]\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e5 rows × 40 columns\u003c/p\u003e\n\n\n\n### pandas.DataFrame to `.feather` and back\n\nThis might cause issues because of the way how pandas implements pyarrow and feather. To work with feather, check that you have installed a correct version of `pyarrow` package:\n\n```python\nimport pyarrow\npyarrow.__version__\n```\n\nYou need 0.17.1 or higher.  Google colab comes with 0.14.1 by default, so you have to upgrade:\n\n```python\n!pip install pyarrow --upgrade\n```\n\nand restart your runtime.\n\nOriginally,  sddk 1.9-2.4 specified the requirement `pyarrow\u003e=0.17.1` , but it produced a lot of conflicts during an installation on Google colab, since there many other packages requiring pyarrow==0.14.1. Therefore, pyarrow is currently bypassed.\n\n\n```python\nsddk.write_file(\"simple_dataframe.feather\", dataframe_object, conf)\n\u003e Your \u003cclass 'pandas.core.frame.DataFrame'\u003e object has been succefully written as \"https://sciencedata.dk/files/simple_dataframe.feather\"\n```\n\n```python\nsddk.read_file(\"simple_dataframe.feather\", \"df\", conf)\n```\n\n\n\n\u003ctable border=\"1\" class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003ea1\u003c/td\u003e\n      \u003ctd\u003eb1\u003c/td\u003e\n      \u003ctd\u003ec1\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003ea2\u003c/td\u003e\n      \u003ctd\u003eb2\u003c/td\u003e\n      \u003ctd\u003ec2\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\n\nReading a larger file from public folder\n\n\n```python\n%%time\nEDH_sample = sddk.read_file(\"EDH_sample.feather\", \"df\", \"8fe7d59de1eafe5f8eaebc0044534606\")\nEDH_sample.head(5)\n```\n\n\n\n\u003ctable border=\"1\" class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ediplomatic_text\u003c/th\u003e\n      \u003cth\u003eliterature\u003c/th\u003e\n      \u003cth\u003etrismegistos_uri\u003c/th\u003e\n      \u003cth\u003eid\u003c/th\u003e\n      \u003cth\u003efindspot_ancient\u003c/th\u003e\n      \u003cth\u003enot_before\u003c/th\u003e\n      \u003cth\u003etype_of_inscription\u003c/th\u003e\n      \u003cth\u003ework_status\u003c/th\u003e\n      \u003cth\u003eedh_geography_uri\u003c/th\u003e\n      \u003cth\u003enot_after\u003c/th\u003e\n      \u003cth\u003e...\u003c/th\u003e\n      \u003cth\u003eexternal_image_uris\u003c/th\u003e\n      \u003cth\u003ereligion\u003c/th\u003e\n      \u003cth\u003efotos\u003c/th\u003e\n      \u003cth\u003egeography\u003c/th\u003e\n      \u003cth\u003emilitary\u003c/th\u003e\n      \u003cth\u003esocial_economic_legal_history\u003c/th\u003e\n      \u003cth\u003ecoordinates\u003c/th\u003e\n      \u003cth\u003etext_cleaned\u003c/th\u003e\n      \u003cth\u003eorigdate_text\u003c/th\u003e\n      \u003cth\u003eobjecttype\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003eD M / NONIAE P F OPTATAE / ET C IVLIO ARTEMONI...\u003c/td\u003e\n      \u003ctd\u003eAE 1983, 0192.; M. Annecchino, Puteoli 4/5, 19...\u003c/td\u003e\n      \u003ctd\u003ehttps://www.trismegistos.org/text/251193\u003c/td\u003e\n      \u003ctd\u003eHD000001\u003c/td\u003e\n      \u003ctd\u003eCumae, bei\u003c/td\u003e\n      \u003ctd\u003e0071\u003c/td\u003e\n      \u003ctd\u003eepitaph\u003c/td\u003e\n      \u003ctd\u003eprovisional\u003c/td\u003e\n      \u003ctd\u003ehttps://edh-www.adw.uni-heidelberg.de/edh/geog...\u003c/td\u003e\n      \u003ctd\u003e0130\u003c/td\u003e\n      \u003ctd\u003e...\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003e40.8471577,14.0550756\u003c/td\u003e\n      \u003ctd\u003eDis Manibus Noniae Publi filiae Optatae et Cai...\u003c/td\u003e\n      \u003ctd\u003e71 AD – 130 AD\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003eC SEXTIVS PARIS / QVI VIXIT / ANNIS LXX\u003c/td\u003e\n      \u003ctd\u003eAE 1983, 0080. (A); A. Ferrua, RAL 36, 1981, 1...\u003c/td\u003e\n      \u003ctd\u003ehttps://www.trismegistos.org/text/265631\u003c/td\u003e\n      \u003ctd\u003eHD000002\u003c/td\u003e\n      \u003ctd\u003eRoma\u003c/td\u003e\n      \u003ctd\u003e0051\u003c/td\u003e\n      \u003ctd\u003eepitaph\u003c/td\u003e\n      \u003ctd\u003eno image\u003c/td\u003e\n      \u003ctd\u003ehttps://edh-www.adw.uni-heidelberg.de/edh/geog...\u003c/td\u003e\n      \u003ctd\u003e0200\u003c/td\u003e\n      \u003ctd\u003e...\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003e41.895466,12.482324\u003c/td\u003e\n      \u003ctd\u003eCaius Sextius Paris qui vixit annis LXX       ...\u003c/td\u003e\n      \u003ctd\u003e51 AD – 200 AD\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e[ ]VMMIO [ ] / [ ]ISENNA[ ] / [ ] XV[ ] / [ ] / [\u003c/td\u003e\n      \u003ctd\u003eAE 1983, 0518. (B); J. González, ZPE 52, 1983,...\u003c/td\u003e\n      \u003ctd\u003ehttps://www.trismegistos.org/text/220675\u003c/td\u003e\n      \u003ctd\u003eHD000003\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003e0131\u003c/td\u003e\n      \u003ctd\u003ehonorific inscription\u003c/td\u003e\n      \u003ctd\u003eprovisional\u003c/td\u003e\n      \u003ctd\u003ehttps://edh-www.adw.uni-heidelberg.de/edh/geog...\u003c/td\u003e\n      \u003ctd\u003e0170\u003c/td\u003e\n      \u003ctd\u003e...\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003e37.37281,-6.04589\u003c/td\u003e\n      \u003ctd\u003ePublio Mummio Publi filio Galeria Sisennae Rut...\u003c/td\u003e\n      \u003ctd\u003e131 AD – 170 AD\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e3\u003c/th\u003e\n      \u003ctd\u003e[ ]AVS[ ]LLA / M PORCI NIGRI SER / DOMINAE VEN...\u003c/td\u003e\n      \u003ctd\u003eAE 1983, 0533. (B); A.U. Stylow, Gerión 1, 198...\u003c/td\u003e\n      \u003ctd\u003ehttps://www.trismegistos.org/text/222102\u003c/td\u003e\n      \u003ctd\u003eHD000004\u003c/td\u003e\n      \u003ctd\u003eIpolcobulcula\u003c/td\u003e\n      \u003ctd\u003e0151\u003c/td\u003e\n      \u003ctd\u003evotive inscription\u003c/td\u003e\n      \u003ctd\u003echecked with photo\u003c/td\u003e\n      \u003ctd\u003ehttps://edh-www.adw.uni-heidelberg.de/edh/geog...\u003c/td\u003e\n      \u003ctd\u003e0200\u003c/td\u003e\n      \u003ctd\u003e...\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003enames of pagan deities\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003e37.4442,-4.27471\u003c/td\u003e\n      \u003ctd\u003eAVSLLA Marci Porci Nigri serva dominae Veneri ...\u003c/td\u003e\n      \u003ctd\u003e151 AD – 200 AD\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e4\u003c/th\u003e\n      \u003ctd\u003e[ ] L SVCCESSVS / [ ] L L IRENAEVS / [ ] C L T...\u003c/td\u003e\n      \u003ctd\u003eAE 1983, 0078. (B); A. Ferrua, RAL 36, 1981, 1...\u003c/td\u003e\n      \u003ctd\u003ehttps://www.trismegistos.org/text/265629\u003c/td\u003e\n      \u003ctd\u003eHD000005\u003c/td\u003e\n      \u003ctd\u003eRoma\u003c/td\u003e\n      \u003ctd\u003e0001\u003c/td\u003e\n      \u003ctd\u003eepitaph\u003c/td\u003e\n      \u003ctd\u003eno image\u003c/td\u003e\n      \u003ctd\u003ehttps://edh-www.adw.uni-heidelberg.de/edh/geog...\u003c/td\u003e\n      \u003ctd\u003e0200\u003c/td\u003e\n      \u003ctd\u003e...\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003eNone\u003c/td\u003e\n      \u003ctd\u003e41.895466,12.482324\u003c/td\u003e\n      \u003ctd\u003elibertus Successus  Luci libertus Irenaeus  C...\u003c/td\u003e\n      \u003ctd\u003e1 AD – 200 AD\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e5 rows × 40 columns\u003c/p\u003e\n\n\n\n\n```python\nsddk.write_file(\"EDH_sample.feather\", EDH_sample, conf)\n\u003e Your \u003cclass 'pandas.core.frame.DataFrame'\u003e object has been succefully written as \"https://sciencedata.dk/files/EDH_sample.feather\"\n```\n\n### pandas.DataFrame to `.csv` and back \n\n\n```python\nimport pandas as pd\ndataframe_object = pd.DataFrame([(\"a1\", \"b1\", \"c1\"), (\"a2\", \"b2\", \"c2\")], columns=[\"a\", \"b\", \"c\"]) \ndataframe_object\n```\n\n\n\n\u003ctable border=\"1\" class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003ea1\u003c/td\u003e\n      \u003ctd\u003eb1\u003c/td\u003e\n      \u003ctd\u003ec1\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003ea2\u003c/td\u003e\n      \u003ctd\u003eb2\u003c/td\u003e\n      \u003ctd\u003ec2\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\n\n\n```python\nsddk.write_file(\"simple_dataframe.csv\", dataframe_object, conf)\n\u003e Your \u003cclass 'pandas.core.frame.DataFrame'\u003e object has been succefully written as \"https://sciencedata.dk/files/simple_dataframe.csv\"\n```\n\n```python\nsddk.read_file(\"simple_dataframe.csv\", \"df\", conf)\n```\n\n\n\n\u003ctable border=\"1\" class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003ea1\u003c/td\u003e\n      \u003ctd\u003eb1\u003c/td\u003e\n      \u003ctd\u003ec1\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003ea2\u003c/td\u003e\n      \u003ctd\u003eb2\u003c/td\u003e\n      \u003ctd\u003ec2\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n## list_filenames()\n\nThis function enables you to list all files within a directory. You can specify the directory, type of the file you are interested in and the conf variable. For instance, the function belows returns all JSON files within your main directory.\n\n```python\n sddk.list_filenames(filetype=\"json\", conf=conf)\n```\n\n## Personal, shared and public folders\n\n**Shared in and out**\n\nOne of the main strength of the sciencedata.dk are collaborative features, namely the way you can manage its **shared** and **public** folders.\n\n**Shared** folders always have one of two forms: either (1) a shared folder *you* share with some users or (2) a shared folder someone else shares with you. \n\nEach shared folder has its **owner**. The folders  are located in their owner's  personal space and can be easily accessed by them from there like any other personal folder.\n\nHowever, in the case of shared folders you do not own (i.e. which were shared with you by someone else) you also need to know the username of their owner. \n\nOne of the key features of the **sddk** package is that it enables you to access both types of shared folders **using exactly the same command**, regardless you are their owner or not. This enables that all members of a team accessing a folder owned and shared by one member can you use the same code. The function just checks both options and chooses what works.\n\nFor instance, a project member with username `member1@inst.org` created a folder in his personal space called `team_folder`,  uploaded there a file called `textfile.txt`, and shared the folder with his teammates with usernames `member2@inst.org` and `member3@inst.org`. All of them can now access the file using the same series of commands:\n\n```python\n# configure session with access to the shared folder:\nconf = sddk.configure(\"team_folder\", \"member1@inst.org\")\n# read the file located in this shared folder:\nsddk.read_file(\"testfile.txt\", \"str\", conf)\n```\n\n**Public files and folders**\n\nSciencedata.dk also enables to produce public files and folders. These files and folders might be accessed using `sddk.read_file()` function even without having sciencedata.dk account. You just have to know  share link code of the file or folder. To read a public file, you can use:\n\n```python\npublic_file_code = \"3e0a55a4182de313e04523360cecd015\"\ngospels_cleaned = sddk.read_file(\"https://sciencedata.dk/public/\" + public_file_code, \"dict\")\n```\n\nTo read a specific file within a public folder, you can use the code below, i.e. you can replace the `conf` parameter by sharing code of the public folder.\n\n```python\npublic_folder_code = \"31b393e2afe1ee96ce81869c7efe18cb\"\nc_aristotelicum = sddk.read_file(\"c_aristotelicum.json\", \"df\", public_folder_code)\n```\n\n## Credit\n\nThe package is continuously develepod and maintained by [Vojtěch Kaše](http://vojtechkase.cz) as a part of the digital collaborative research workflow of the [SDAM project](https://sdam-au.github.io/sdam-au/) at Aarhus University, Denmark. To cite this package, use:\n\n## Version history\n* 3.8 - new function s.list_directories(); support for GeoDataFrames to `.parquet` and back\n* 3.7 - fixing public files + version attribute \n* 3.6 - fixing geojson and relative paths\n* 3.5 - minor bugs\n* 3.4 - fixing issues with feather\n* 3.3 - fixing issues with missing plotly\n* 3.2 - fixing an issue with nonfunctional \"silo1\" authentification \u0026 minor simplifications\n* 3.1 - fixing an issue with nonfunctional \"silo1\" authentification \u0026 minor simplifications\n* 3.0 - new way of authentification, based on `cloudSession()` class object; it also supports `owncloud.cesnet.cz` as service provider\n* 2.10 - supports `.geojson`\n* 2.9 - `.eps` file format for matplotlib figures support (plotly works only with `.png`) \n* 2.8.2 - plotly support\n* 2.7 - resolving issues #1 (reading public json files) \u0026 #2 (beautifulsoup import)\n* 2.6 - pyarrow avoided\n* 2.5 - pyarrow version changed back to unspecified\n* 2.4 - json encoding bug removed\n* 2.3 - json encoding\n* 2.2 - setup.py update\n* 2.1 - README.md update\n* 2.0 - tested with `.txt`, `.json`, `.feather` and `.png`.\n* 1.9 - supports public files and folders; supports `.feather` file format (`utf.8` enforced)\n* 1.8 - `list_filenames()` function and `configure()` alias added\n* 1.7 - figures\n* 1.6.1 - bug\n* 1.6 - enables writing dataframes as `csv`\n* 1.5 - reads individually shared files without necessary configuration\n* 1.4 - `json` package dependency\n* 1.3 - `conf` corrected\n* 1.2 - `conf` variable added\n* 1.1 - a simple correction\n* 1.0 -  functions `write_file()` and `read_file()` added\n* 0.1.2 -  redirection added\n* 0.1.1 - added shared folder owner argument to the main configuration function; migration from test.pypi to real pypi\n* 0.0.8 - shared folders reading\u0026writing for ordinary users finally functional\n* 0.0.7 - configuration of individual session by default\n* 0.0.6 - first functional configuration\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsdam-au%2Fsddk_py","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsdam-au%2Fsddk_py","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsdam-au%2Fsddk_py/lists"}