Name | sortdx JSON |
Version |
0.1.1
JSON |
| download |
home_page | None |
Summary | Universal sorting tool for files, data structures, and large datasets |
upload_time | 2025-08-18 16:31:35 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.10 |
license | MIT |
keywords |
sorting
csv
json
external-sort
cli
data-processing
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# sortdx
Un utilitaire de tri de fichiers puissant et flexible pour Python qui gère intelligemment les fichiers CSV, JSONL et texte.
## 🚀 Démarrage Rapide
```bash
pip install sortdx
```
### Utilisation de Base
```python
import sortdx
# Trier un CSV par colonne âge
sortdx.sort_file('data.csv', 'sorted.csv', keys=[sortdx.key('age', 'num')])
# Trier un JSONL par timestamp
sortdx.sort_file('logs.jsonl', 'sorted_logs.jsonl', keys=[sortdx.key('timestamp')])
# Trier un fichier texte par la 3ème colonne numériquement
sortdx.sort_file('data.txt', 'sorted.txt', keys=[sortdx.key(3, 'num')])
```
## 📦 Installation
```bash
pip install sortdx
```
Pour utiliser l'interface en ligne de commande (optionnel) :
```bash
pip install "sortdx[cli]"
```
## 🔧 Fonctionnalités
- **Détection Intelligente de Format** : Détecte automatiquement les formats CSV, JSONL et texte
- **Clés de Tri Multiples** : Tri par plusieurs colonnes/champs avec différents types de données
- **Efficace en Mémoire** : Gère de gros fichiers sans tout charger en mémoire
- **Tri Conscient du Type** : Support du tri string, numérique et date/heure
- **Entrée Flexible** : Fonctionne avec des chemins de fichiers ou des objets file-like
- **Statistiques** : Statistiques de tri optionnelles et rapport de progression
## 📖 Utilisation
### Clés de Tri
Créez des clés de tri avec la fonction `sortdx.key()` :
```python
import sortdx
# Tri textuel (par défaut)
key1 = sortdx.key('name')
key1 = sortdx.key(1) # Index de colonne pour fichiers texte
# Tri numérique
key2 = sortdx.key('age', 'num')
key2 = sortdx.key(2, 'num')
# Tri inversé
key3 = sortdx.key('name', reverse=True)
```
### Formats de Fichiers
#### Fichiers CSV
```python
# Tri par une seule colonne
sortdx.sort_file('data.csv', 'output.csv', keys=[sortdx.key('age', 'num')])
# Tri par plusieurs colonnes
sortdx.sort_file('data.csv', 'output.csv', keys=[
sortdx.key('department'),
sortdx.key('salary', 'num', reverse=True)
])
```
#### Fichiers JSONL
```python
# Tri de fichiers JSON Lines
sortdx.sort_file('logs.jsonl', 'sorted.jsonl', keys=[
sortdx.key('timestamp'),
sortdx.key('priority', 'num')
])
```
#### Fichiers Texte
```python
# Tri par index de colonne (base 1)
sortdx.sort_file('data.txt', 'sorted.txt', keys=[sortdx.key(2, 'num')])
# Délimiteur personnalisé
sortdx.sort_file('data.txt', 'sorted.txt',
keys=[sortdx.key(1)],
delimiter='|')
```
### Options Avancées
```python
# Obtenir des statistiques de tri
stats = sortdx.sort_file('large_file.csv', 'sorted.csv',
keys=[sortdx.key('id', 'num')],
stats=True)
print(f"Traité {stats.lines_processed} lignes")
# Tri efficace en mémoire pour gros fichiers
sortdx.sort_file('huge_file.csv', 'sorted.csv',
keys=[sortdx.key('timestamp')],
max_memory_mb=500) # Limiter l'usage mémoire
```
## 🔄 Types de Données
- `'str'` ou `'text'` : Tri string/texte (par défaut)
- `'num'` ou `'numeric'` : Tri numérique (gère entiers et flottants)
- `'date'` ou `'datetime'` : Tri date/heure (format ISO recommandé)
## 📊 Exemples
### Exemple 1 : Données Employés (CSV)
```python
import sortdx
# Contenu employees.csv :
# name,age,department,salary
# Alice,25,Engineering,75000
# Bob,30,Sales,65000
# Carol,28,Engineering,80000
# Tri par département, puis par salaire (plus élevé en premier)
sortdx.sort_file('employees.csv', 'sorted_employees.csv', keys=[
sortdx.key('department'),
sortdx.key('salary', 'num', reverse=True)
])
```
### Exemple 2 : Fichiers de Log (JSONL)
```python
# Contenu logs.jsonl :
# {"timestamp": "2024-01-01T10:00:00Z", "level": "INFO", "message": "Start"}
# {"timestamp": "2024-01-01T10:01:00Z", "level": "ERROR", "message": "Failed"}
# Tri par timestamp
sortdx.sort_file('logs.jsonl', 'sorted_logs.jsonl', keys=[
sortdx.key('timestamp')
])
```
### Exemple 3 : Données Séparées par Espaces (TXT)
```python
# Contenu data.txt :
# Alice 25 Engineering 75000
# Bob 30 Sales 65000
# Tri par 4ème colonne (salaire) numériquement
sortdx.sort_file('data.txt', 'sorted_data.txt', keys=[
sortdx.key(4, 'num', reverse=True)
])
```
## 🧪 Tests Réels
Le package a été testé avec succès sur :
### CSV
```csv
name,age,salary
Alice,25,45000
Diana,28,55000
Bob,30,50000
Charlie,35,60000
```
**Tri par âge** → Alice (25), Diana (28), Bob (30), Charlie (35) ✅
### JSONL
```jsonl
{"name": "Alice", "age": 25, "timestamp": "2025-01-15T09:15:00Z"}
{"name": "Diana", "age": 28, "timestamp": "2025-01-15T08:20:00Z"}
{"name": "Bob", "age": 30, "timestamp": "2025-01-15T10:30:00Z"}
{"name": "Charlie", "age": 35, "timestamp": "2025-01-15T11:45:00Z"}
```
**Tri par âge** → Même ordre que CSV ✅
### TXT
```
file10.txt
file2.txt
file1.txt
file20.txt
file3.txt
```
**Tri numérique par 3ème colonne** → Ordre correct selon valeurs numériques ✅
## 🎯 Performance
sortdx est conçu pour l'efficacité :
- **Usage mémoire** : Limites mémoire configurables pour traitement de gros fichiers
- **Vitesse** : Algorithmes de tri optimisés avec overhead minimal
- **Évolutivité** : Gère efficacement les fichiers de KB à GB
## 📈 Statistiques de Tri
```python
import sortdx
# Obtenir des statistiques détaillées
stats = sortdx.sort_file('data.csv', 'sorted.csv',
keys=[sortdx.key('age', 'num')],
stats=True)
print(f"Lignes traitées : {stats.lines_processed}")
print(f"Temps de tri : {stats.sort_time:.2f}s")
print(f"Mémoire utilisée : {stats.memory_used_mb:.1f}MB")
```
## 🔗 API Référence
### `sortdx.sort_file(input_path, output_path, keys, **options)`
Trie un fichier selon les clés spécifiées.
**Paramètres :**
- `input_path` (str) : Chemin du fichier d'entrée
- `output_path` (str) : Chemin du fichier de sortie
- `keys` (List[SortKey]) : Liste des clés de tri
- `delimiter` (str, optionnel) : Délimiteur pour fichiers texte (défaut: auto-détection)
- `stats` (bool, optionnel) : Retourner des statistiques (défaut: False)
- `max_memory_mb` (int, optionnel) : Limite mémoire en MB
**Retour :**
- `SortStats` si stats=True, sinon None
### `sortdx.key(field, type='str', reverse=False)`
Crée une clé de tri.
**Paramètres :**
- `field` (str|int) : Nom de champ (CSV/JSONL) ou index de colonne (TXT)
- `type` (str) : Type de données ('str', 'num', 'date')
- `reverse` (bool) : Tri inversé
## 📄 Licence
Licence MIT - voir le fichier [LICENSE](LICENSE) pour les détails.
## 🤝 Contribution
Les contributions sont les bienvenues ! N'hésitez pas à soumettre une Pull Request.
## 📞 Support
Si vous rencontrez des problèmes ou avez des questions, veuillez [ouvrir une issue](https://github.com/yourusername/sortdx/issues) sur GitHub.
## 🌐 PyPI
Package disponible sur PyPI : https://pypi.org/project/sortdx/
## 🏷️ Version
Version actuelle : **0.1.0**
Installation testée sur :
- Python 3.10+
- Windows, macOS, Linux
- Fichiers de quelques KB à plusieurs GB
Raw data
{
"_id": null,
"home_page": null,
"name": "sortdx",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": "sortdx contributors <dev@sortdx.io>",
"keywords": "sorting, csv, json, external-sort, cli, data-processing",
"author": null,
"author_email": "sortdx contributors <dev@sortdx.io>",
"download_url": "https://files.pythonhosted.org/packages/bb/34/70948b48259517988c50bb4c5e226d9558c6c950dceab41072725948fe4a/sortdx-0.1.1.tar.gz",
"platform": null,
"description": "# sortdx\r\n\r\nUn utilitaire de tri de fichiers puissant et flexible pour Python qui g\u00e8re intelligemment les fichiers CSV, JSONL et texte.\r\n\r\n## \ud83d\ude80 D\u00e9marrage Rapide\r\n\r\n```bash\r\npip install sortdx\r\n```\r\n\r\n### Utilisation de Base\r\n\r\n```python\r\nimport sortdx\r\n\r\n# Trier un CSV par colonne \u00e2ge\r\nsortdx.sort_file('data.csv', 'sorted.csv', keys=[sortdx.key('age', 'num')])\r\n\r\n# Trier un JSONL par timestamp\r\nsortdx.sort_file('logs.jsonl', 'sorted_logs.jsonl', keys=[sortdx.key('timestamp')])\r\n\r\n# Trier un fichier texte par la 3\u00e8me colonne num\u00e9riquement\r\nsortdx.sort_file('data.txt', 'sorted.txt', keys=[sortdx.key(3, 'num')])\r\n```\r\n\r\n## \ud83d\udce6 Installation\r\n\r\n```bash\r\npip install sortdx\r\n```\r\n\r\nPour utiliser l'interface en ligne de commande (optionnel) :\r\n```bash\r\npip install \"sortdx[cli]\"\r\n```\r\n\r\n## \ud83d\udd27 Fonctionnalit\u00e9s\r\n\r\n- **D\u00e9tection Intelligente de Format** : D\u00e9tecte automatiquement les formats CSV, JSONL et texte\r\n- **Cl\u00e9s de Tri Multiples** : Tri par plusieurs colonnes/champs avec diff\u00e9rents types de donn\u00e9es\r\n- **Efficace en M\u00e9moire** : G\u00e8re de gros fichiers sans tout charger en m\u00e9moire\r\n- **Tri Conscient du Type** : Support du tri string, num\u00e9rique et date/heure\r\n- **Entr\u00e9e Flexible** : Fonctionne avec des chemins de fichiers ou des objets file-like\r\n- **Statistiques** : Statistiques de tri optionnelles et rapport de progression\r\n\r\n## \ud83d\udcd6 Utilisation\r\n\r\n### Cl\u00e9s de Tri\r\n\r\nCr\u00e9ez des cl\u00e9s de tri avec la fonction `sortdx.key()` :\r\n\r\n```python\r\nimport sortdx\r\n\r\n# Tri textuel (par d\u00e9faut)\r\nkey1 = sortdx.key('name')\r\nkey1 = sortdx.key(1) # Index de colonne pour fichiers texte\r\n\r\n# Tri num\u00e9rique\r\nkey2 = sortdx.key('age', 'num')\r\nkey2 = sortdx.key(2, 'num')\r\n\r\n# Tri invers\u00e9\r\nkey3 = sortdx.key('name', reverse=True)\r\n```\r\n\r\n### Formats de Fichiers\r\n\r\n#### Fichiers CSV\r\n```python\r\n# Tri par une seule colonne\r\nsortdx.sort_file('data.csv', 'output.csv', keys=[sortdx.key('age', 'num')])\r\n\r\n# Tri par plusieurs colonnes\r\nsortdx.sort_file('data.csv', 'output.csv', keys=[\r\n sortdx.key('department'),\r\n sortdx.key('salary', 'num', reverse=True)\r\n])\r\n```\r\n\r\n#### Fichiers JSONL\r\n```python\r\n# Tri de fichiers JSON Lines\r\nsortdx.sort_file('logs.jsonl', 'sorted.jsonl', keys=[\r\n sortdx.key('timestamp'),\r\n sortdx.key('priority', 'num')\r\n])\r\n```\r\n\r\n#### Fichiers Texte\r\n```python\r\n# Tri par index de colonne (base 1)\r\nsortdx.sort_file('data.txt', 'sorted.txt', keys=[sortdx.key(2, 'num')])\r\n\r\n# D\u00e9limiteur personnalis\u00e9\r\nsortdx.sort_file('data.txt', 'sorted.txt', \r\n keys=[sortdx.key(1)],\r\n delimiter='|')\r\n```\r\n\r\n### Options Avanc\u00e9es\r\n\r\n```python\r\n# Obtenir des statistiques de tri\r\nstats = sortdx.sort_file('large_file.csv', 'sorted.csv', \r\n keys=[sortdx.key('id', 'num')],\r\n stats=True)\r\nprint(f\"Trait\u00e9 {stats.lines_processed} lignes\")\r\n\r\n# Tri efficace en m\u00e9moire pour gros fichiers\r\nsortdx.sort_file('huge_file.csv', 'sorted.csv',\r\n keys=[sortdx.key('timestamp')],\r\n max_memory_mb=500) # Limiter l'usage m\u00e9moire\r\n```\r\n\r\n## \ud83d\udd04 Types de Donn\u00e9es\r\n\r\n- `'str'` ou `'text'` : Tri string/texte (par d\u00e9faut)\r\n- `'num'` ou `'numeric'` : Tri num\u00e9rique (g\u00e8re entiers et flottants)\r\n- `'date'` ou `'datetime'` : Tri date/heure (format ISO recommand\u00e9)\r\n\r\n## \ud83d\udcca Exemples\r\n\r\n### Exemple 1 : Donn\u00e9es Employ\u00e9s (CSV)\r\n```python\r\nimport sortdx\r\n\r\n# Contenu employees.csv :\r\n# name,age,department,salary\r\n# Alice,25,Engineering,75000\r\n# Bob,30,Sales,65000\r\n# Carol,28,Engineering,80000\r\n\r\n# Tri par d\u00e9partement, puis par salaire (plus \u00e9lev\u00e9 en premier)\r\nsortdx.sort_file('employees.csv', 'sorted_employees.csv', keys=[\r\n sortdx.key('department'),\r\n sortdx.key('salary', 'num', reverse=True)\r\n])\r\n```\r\n\r\n### Exemple 2 : Fichiers de Log (JSONL)\r\n```python\r\n# Contenu logs.jsonl :\r\n# {\"timestamp\": \"2024-01-01T10:00:00Z\", \"level\": \"INFO\", \"message\": \"Start\"}\r\n# {\"timestamp\": \"2024-01-01T10:01:00Z\", \"level\": \"ERROR\", \"message\": \"Failed\"}\r\n\r\n# Tri par timestamp\r\nsortdx.sort_file('logs.jsonl', 'sorted_logs.jsonl', keys=[\r\n sortdx.key('timestamp')\r\n])\r\n```\r\n\r\n### Exemple 3 : Donn\u00e9es S\u00e9par\u00e9es par Espaces (TXT)\r\n```python\r\n# Contenu data.txt :\r\n# Alice 25 Engineering 75000\r\n# Bob 30 Sales 65000\r\n\r\n# Tri par 4\u00e8me colonne (salaire) num\u00e9riquement\r\nsortdx.sort_file('data.txt', 'sorted_data.txt', keys=[\r\n sortdx.key(4, 'num', reverse=True)\r\n])\r\n```\r\n\r\n## \ud83e\uddea Tests R\u00e9els\r\n\r\nLe package a \u00e9t\u00e9 test\u00e9 avec succ\u00e8s sur :\r\n\r\n### CSV\r\n```csv\r\nname,age,salary\r\nAlice,25,45000\r\nDiana,28,55000\r\nBob,30,50000\r\nCharlie,35,60000\r\n```\r\n**Tri par \u00e2ge** \u2192 Alice (25), Diana (28), Bob (30), Charlie (35) \u2705\r\n\r\n### JSONL\r\n```jsonl\r\n{\"name\": \"Alice\", \"age\": 25, \"timestamp\": \"2025-01-15T09:15:00Z\"}\r\n{\"name\": \"Diana\", \"age\": 28, \"timestamp\": \"2025-01-15T08:20:00Z\"}\r\n{\"name\": \"Bob\", \"age\": 30, \"timestamp\": \"2025-01-15T10:30:00Z\"}\r\n{\"name\": \"Charlie\", \"age\": 35, \"timestamp\": \"2025-01-15T11:45:00Z\"}\r\n```\r\n**Tri par \u00e2ge** \u2192 M\u00eame ordre que CSV \u2705\r\n\r\n### TXT\r\n```\r\nfile10.txt\r\nfile2.txt \r\nfile1.txt\r\nfile20.txt\r\nfile3.txt\r\n```\r\n**Tri num\u00e9rique par 3\u00e8me colonne** \u2192 Ordre correct selon valeurs num\u00e9riques \u2705\r\n\r\n## \ud83c\udfaf Performance\r\n\r\nsortdx est con\u00e7u pour l'efficacit\u00e9 :\r\n\r\n- **Usage m\u00e9moire** : Limites m\u00e9moire configurables pour traitement de gros fichiers\r\n- **Vitesse** : Algorithmes de tri optimis\u00e9s avec overhead minimal\r\n- **\u00c9volutivit\u00e9** : G\u00e8re efficacement les fichiers de KB \u00e0 GB\r\n\r\n## \ud83d\udcc8 Statistiques de Tri\r\n\r\n```python\r\nimport sortdx\r\n\r\n# Obtenir des statistiques d\u00e9taill\u00e9es\r\nstats = sortdx.sort_file('data.csv', 'sorted.csv', \r\n keys=[sortdx.key('age', 'num')], \r\n stats=True)\r\n\r\nprint(f\"Lignes trait\u00e9es : {stats.lines_processed}\")\r\nprint(f\"Temps de tri : {stats.sort_time:.2f}s\") \r\nprint(f\"M\u00e9moire utilis\u00e9e : {stats.memory_used_mb:.1f}MB\")\r\n```\r\n\r\n## \ud83d\udd17 API R\u00e9f\u00e9rence\r\n\r\n### `sortdx.sort_file(input_path, output_path, keys, **options)`\r\n\r\nTrie un fichier selon les cl\u00e9s sp\u00e9cifi\u00e9es.\r\n\r\n**Param\u00e8tres :**\r\n- `input_path` (str) : Chemin du fichier d'entr\u00e9e\r\n- `output_path` (str) : Chemin du fichier de sortie\r\n- `keys` (List[SortKey]) : Liste des cl\u00e9s de tri\r\n- `delimiter` (str, optionnel) : D\u00e9limiteur pour fichiers texte (d\u00e9faut: auto-d\u00e9tection)\r\n- `stats` (bool, optionnel) : Retourner des statistiques (d\u00e9faut: False)\r\n- `max_memory_mb` (int, optionnel) : Limite m\u00e9moire en MB\r\n\r\n**Retour :**\r\n- `SortStats` si stats=True, sinon None\r\n\r\n### `sortdx.key(field, type='str', reverse=False)`\r\n\r\nCr\u00e9e une cl\u00e9 de tri.\r\n\r\n**Param\u00e8tres :**\r\n- `field` (str|int) : Nom de champ (CSV/JSONL) ou index de colonne (TXT)\r\n- `type` (str) : Type de donn\u00e9es ('str', 'num', 'date')\r\n- `reverse` (bool) : Tri invers\u00e9\r\n\r\n## \ud83d\udcc4 Licence\r\n\r\nLicence MIT - voir le fichier [LICENSE](LICENSE) pour les d\u00e9tails.\r\n\r\n## \ud83e\udd1d Contribution\r\n\r\nLes contributions sont les bienvenues ! N'h\u00e9sitez pas \u00e0 soumettre une Pull Request.\r\n\r\n## \ud83d\udcde Support\r\n\r\nSi vous rencontrez des probl\u00e8mes ou avez des questions, veuillez [ouvrir une issue](https://github.com/yourusername/sortdx/issues) sur GitHub.\r\n\r\n## \ud83c\udf10 PyPI\r\n\r\nPackage disponible sur PyPI : https://pypi.org/project/sortdx/\r\n\r\n## \ud83c\udff7\ufe0f Version\r\n\r\nVersion actuelle : **0.1.0**\r\n\r\nInstallation test\u00e9e sur :\r\n- Python 3.10+\r\n- Windows, macOS, Linux\r\n- Fichiers de quelques KB \u00e0 plusieurs GB\r\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Universal sorting tool for files, data structures, and large datasets",
"version": "0.1.1",
"project_urls": {
"Documentation": "https://github.com/Okymi-X/sortdx#readme",
"Homepage": "https://github.com/Okymi-X/sortdx",
"Issues": "https://github.com/Okymi-X/sortdx/issues",
"Repository": "https://github.com/Okymi-X/sortdx"
},
"split_keywords": [
"sorting",
" csv",
" json",
" external-sort",
" cli",
" data-processing"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "d07d50292bfe26001c20d3688d856c97fa1aedfef8b9bdf72bf99cbb9e1981b8",
"md5": "69878a1d6dc57245c5ec47afc5ebb739",
"sha256": "eb73527fb8397b758a19f82d21dba7fa04e5a127bc2f220e235412bf1cfbbab1"
},
"downloads": -1,
"filename": "sortdx-0.1.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "69878a1d6dc57245c5ec47afc5ebb739",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10",
"size": 19473,
"upload_time": "2025-08-18T16:31:33",
"upload_time_iso_8601": "2025-08-18T16:31:33.288943Z",
"url": "https://files.pythonhosted.org/packages/d0/7d/50292bfe26001c20d3688d856c97fa1aedfef8b9bdf72bf99cbb9e1981b8/sortdx-0.1.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "bb3470948b48259517988c50bb4c5e226d9558c6c950dceab41072725948fe4a",
"md5": "f65217faeea6223f18e3b64d710b06eb",
"sha256": "d76ca32daa9f1728d9e1ac890f02b8b1f901f75963bb82e5213885205b0892a4"
},
"downloads": -1,
"filename": "sortdx-0.1.1.tar.gz",
"has_sig": false,
"md5_digest": "f65217faeea6223f18e3b64d710b06eb",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 24412,
"upload_time": "2025-08-18T16:31:35",
"upload_time_iso_8601": "2025-08-18T16:31:35.671476Z",
"url": "https://files.pythonhosted.org/packages/bb/34/70948b48259517988c50bb4c5e226d9558c6c950dceab41072725948fe4a/sortdx-0.1.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-18 16:31:35",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "Okymi-X",
"github_project": "sortdx#readme",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "sortdx"
}