La meilleure façon de transposer une grille de données dans un fichier
-
21-09-2019 - |
Question
J'ai de gros fichiers de données de valeurs sur une grille 2D. Elles sont organisées de telle sorte que les lignes suivantes de données dans le réseau sont des lignes suivantes dans le fichier. Chaque colonne est séparée par un caractère de tabulation. Pour l'essentiel, c'est un fichier CSV, mais avec des onglets au lieu de colonnes.
J'ai besoin de transposer les données (première ligne devient la première colonne) et la sortie vers un autre fichier. Quelle est la meilleure façon de le faire? Toute langue est correct (je préfère utiliser Perl ou C / C ++). À l'heure actuelle, je script Perl viens de lire dans le fichier en mémoire, mais je les fichiers qui sont tout simplement gigantesques.
La solution
La façon la plus simple serait de faire des passes multiples grâce à votre entrée, l'extraction d'un sous-ensemble de colonnes à chaque passage. Le nombre de colonnes serait déterminé par la quantité de mémoire que vous vouliez utiliser et le nombre de lignes dans le fichier d'entrée.
Par exemple:
Le passage 1 vous lisez le fichier d'entrée entier et processus que les premiers, disons, 10 colonnes. Si l'entrée avait 1 million de lignes, la sortie serait un fichier avec 1 million de colonnes et 10 lignes. Sur le passage suivant vous lire à nouveau l'entrée, et des colonnes de processus 11 à 20, les résultats annexant au fichier de sortie d'origine. Et ainsi de suite ....
Autres conseils
Si vous avez Python avec NumPy installé, il est aussi simple que ceci:
#!/usr/bin/env python
import numpy, csv
with open('/path/to/data.csv', 'rb') as file:
csvdata = csv.reader()
data = numpy.array(csvdata)
transpose = data.T
... le module csv
fait partie de la bibliothèque standard de Python.