2017-10-05 12 views
0
filename = selectedCompany + "/" + "1" + ".txt" # define filename to save file with 
     for row in csv_file: 
      if selectedCompany == row[1]: 
       count +=1 
       if not os.path.exists(os.path.dirname(filename)): 
        try: 
         os.makedirs(os.path.dirname(filename)) 
        except OSError as exc: # Guard against race condition 
         if exc.errno != errno.EEXIST: 
          raise 
     totalCnt=0 
     print listOfCompanies #to debug 
     print selectedCompany #to debug 
     while totalCnt < len(csv_file): # as long as total count is lesser than length of csv file 
      totalCnt+=1  # add total count of 1 
      for row in csv_file: 
       if selectedCompany == row[:][1]: # if selected company equals to the company in csv file 
        with open(filename, "w") as output: # save the .txt file 
         output.write(str(csv_file[totalCnt])) # save the contents of the csv file 
       else: 
        totalCnt+=1 # add total count of 1 

Bonjour à tous, J'utilise python pour lire les données d'un fichier csv et les exporter en tant que fichiers .txt individuels. Ma question est comment puis-je faire référence à un champ spécifique dans une rangée spécifique?Comment faire référence à un champ spécifique dans une ligne lors de l'interrogation dans le fichier CSV

Par exemple mes ensemble de données dans un fichier de format CSV est la suivante

Nom Sexe Age
john m 15
Mary F 13
sam m 12

A l'entrée de l'utilisateur du nom (c'est-à-dire sam), je voudrais pouvoir exporter la totalité de la ligne de données (c'est-à-dire "sam, m, 12") en tant que données et l'exporter en tant que fichier .txt.

Si je veux indiquer le sexe de Sam, par exemple, comment je vais le faire? De plus, comment utiliser correctement la boucle for pour m'assurer que je peux exporter tous les fichiers .txt nécessaires?

J'ai essayé de faire des recherches, mais mon cas est une erreur de logique et il est vraiment difficile à résoudre.

J'apprécierais vraiment toute aide.

Edit:

Message d'erreur après avoir utilisé le module panda:

File "C:\Python27\lib\site-packages\pandas\core\frame.py", line 1797, in 
    __getitem__ 
    return self._getitem_column(key) 
    File "C:\Python27\lib\site-packages\pandas\core\frame.py", line 1804, in _ 
    getitem_column 
    return self._get_item_cache(key) 
     File "C:\Python27\lib\site-packages\pandas\core\generic.py", line 1084, in 
    _get_item_cache 
    values = self._data.get(item) 
     File "C:\Python27\lib\site-packages\pandas\core\internals.py", line 2851, 
    in get 
    loc = self.items.get_loc(item) 
    File "C:\Python27\lib\site-packages\pandas\core\index.py", line 1572, in 
    get_loc 
    return self._engine.get_loc(_values_from_object(key)) 
    File "pandas\index.pyx", line 134, in pandas.index.IndexEngine.get_loc 
    (pandas\index.c:3824) 
    File "pandas\index.pyx", line 154, in pandas.index.IndexEngine.get_loc 
    (pandas\index.c:3704) 
    File "pandas\hashtable.pyx", line 686, in p 
    pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:12280) 
     File "pandas\hashtable.pyx", line 694, in pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:12231) 
KeyError: False 
+1

je regarderais dans le module de bibliothèque standard [csv] (https://docs.python.org/3/library/csv.html). Il fournit un objet 'lecteur()' pratique composé d'une liste de listes que vous pouvez inscrire (c'est-à-dire index par col). – pstatix

+0

Ou même 'DictReader' qui utilise les en-têtes col comme des clés de dictionnaire – Adirio

+0

Salut Sarah, s'il vous plaît vérifier ma réponse et demandez-moi ce que vous avez besoin de plus, je vais essayer d'aider. –

Répondre

0

Si je vous je pense paquet Pandas - avec ce package votre tâche pourrait être très simple, par exemple

import pandas as pd 
data = pd.read_csv("CSVFILE.csv", sep=',') # if you have your csv with headers it will create dataframe with names name | gender | age 
desiredoutput = data[data.name == USERINPUT] #USERINPUT is e.g. sam (it us up to you how you gain it.. e.g. via input() command) 

Votre sortie est également par des virgules (valeurs séparées (i.e. « sam, m, 12 »)) afin que vous puissiez enregistrer facilement csv containig une seule ligne que vous sélectionnez par l'entrée utilisateur.

desiredoutput.to_csv("NAMEYOUCHOOSE.csv", sep = ",", index=False, header=False) 
+0

Hi Petr J'ai reçu plusieurs messages d'erreur dont je n'ai aucune idée. Aucun conseil? –

+0

Pouvez-vous partager ces messages? Peut-être que vous n'avez pas installé de paquet pandas (par exemple via pip installer des pandas) –

+0

Ils sont dans mon post original. –