Comment rechercher rapidement par le biais d'un .fichier csv en Python
Je suis en train de lire un de 6 millions d'entrée .fichier csv avec Python, et je veux être en mesure de rechercher par le biais de ce fichier pour une entrée particulière.
Sont là toutes les astuces pour rechercher le fichier en entier? Si vous lisez le tout dans un dictionnaire ou si vous effectuez une recherche à chaque fois? J'ai essayé de le charger dans un dictionnaire, mais qui a pris des siècles donc, je suis actuellement à la recherche à travers l'ensemble du fichier à chaque fois ce qui semble inutile.
Je pourrais utiliser que la liste est par ordre alphabétique? (par exemple, si le mot de recherche commence par un "b" je ne recherche à partir de la ligne qui contient le premier mot commençant par "b" à la ligne qui comprend le dernier mot commençant par "b")
Je suis en utilisant import csv
.
(d'un côté la question: il est possible de faire csv
aller à une ligne spécifique dans le fichier? Je veux faire le début du programme, à une ligne aléatoire)
Edit: j'ai déjà une copie de la liste comme .fichier sql ainsi, comment pourrais-je la mettre en Python?
J'ai oublié de mentionner que je ne suis pas un Python-expert par tous les moyens donc un exemple de code serait grandement apprécié.
Combien de recherches seront effectuer par exécution de votre script?
Deux programmes, l'un est une recherche dans le dictionnaire, où l'utilisateur peut interroger un mot ou un mot fléchi forme et l'autre est là que le programme génère aléatoirement un mot de formulaire. Le nombre de recherches dépend du nombre de mots que l'utilisateur veut regarder pour le fond.
OriginalL'auteur Iceland_jack | 2010-02-19
Vous devez vous connecter pour publier un commentaire.
Si le fichier csv n'est pas de changer, charge à elle dans une base de données, où la recherche est rapide et facile. Si vous n'êtes pas familier avec SQL, vous aurez besoin de rafraîchir.
Voici un exemple grossier de l'insertion d'un fichier csv dans une table sqlite. Exemple csv est"; " délimité, et a 2 colonnes.
com.close() doit être con.close()
Ce n'est pas une question de perl vs python, vous êtes le problème, c'est que vous êtes constamment la lecture d'un fichier de grande taille. Perl et python serait-il le faire de la même façon. Une base de données juste vous donner une meilleure interface d'indexation et de recherche.
Je préfère ne pas utiliser une base de données depuis que je ne suis pas familier avec SQL, il n'y a pas moyen de mettre en œuvre ce bien sans SQL et si il n'y a pas ce système de gestion de base dois-je utiliser? Est mySQL bon? Et n'avez-vous pas charger tout le fichier dans une base de données dans votre exemple, la création de 6 millions de tuples? N'est-ce pas prendre beaucoup de temps, chaque fois que le programme démarre?
Il est assez court et doux exemple. Pourquoi ne pas l'essayer et voir combien de temps la création de la DB prend et essayer quelques recherches? Qui sait, peut-être que c'est la solution parfaite pour vous
OriginalL'auteur JimB
vous pouvez utiliser le mappage de mémoire pour les très gros fichiers
OriginalL'auteur ghostdog74
Bien, si vos paroles ne sont pas trop gros (ce qui signifie qu'ils vont s'adapter à la mémoire), alors voici une façon simple de le faire (je suppose qu'ils sont tous les mots).
Il peut prendre une minute pour charger toutes les valeurs du fichier. Il utilise le binaire de recherche pour trouver vos mots. Dans ce cas, j'ai été à la recherche pour le bacon (qui ne regarde pas de bacon?). Si il y a des valeurs répétées vous pouvez également utiliser bisect_right pour trouver l'index de 1 au-delà de la plus à droite de l'élément, qui correspond à la valeur que vous recherchez. Vous pouvez toujours utiliser cette option si vous avez la clé:des paires de valeurs. Vous aurez juste à faire de chaque objet dans votre liste de mots à une liste de [key, value].
Note De Côté
Je ne pense pas que vous puissiez vraiment de ligne à la ligne dans un fichier csv très facilement. Voyez-vous, ces fichiers sont en fait que de longues chaînes de caractères avec des caractères \n nouvelles lignes de.
OriginalL'auteur Justin Peel
Vous ne pouvez pas accéder directement à une ligne spécifique dans le fichier parce que les lignes sont de longueur variable, de sorte que le seul moyen de savoir quand la ligne #n commence est à la recherche pour les n premiers retours à la ligne. Et il ne suffit pas de regarder pour un '\n' caractères car CSV permet des retours à la ligne dans les cellules de tableau, si vous avez vraiment n'avez pas à analyser le fichier de toute façon.
OriginalL'auteur dan04
mon idée est d'utiliser python zodb module pour stocker dictionaty type de données, puis créer un nouveau fichier csv à l'aide de cette structure de données. faire tout de votre entreprise à cette époque.
OriginalL'auteur vicky
Il y a une manière assez simple à faire.En fonction du nombre de colonnes que vous voulez python à imprimer, puis vous pouvez avoir besoin d'ajouter ou de supprimer certaines lignes d'impression.
J'espère que cette aide.
OriginalL'auteur TheOneWhoLikesToKnow