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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top