2017-08-03 4 views
0

Je collecte des données sur un périphérique USB et j'obtiens 2 ensembles de données sous la forme d'une variable qui contient 200 points de données sous la forme de chaînes séparées par des virgules. Comment puis-je sauvegarder ces variables en tant que fichiers csv sur mon ordinateur alors? Idéalement, je pense que je voudrais le faire dans une fonction parce que je voudrais le répéter efficacement pour beaucoup d'ensembles de données, sans les surcharger.Enregistrer une liste de chaînes dans un fichier csv?

Voici mon code actuel:

freq = instr.ask("FREQ:DATA?") 
data = instr.ask("CALC:DATA:FDATa?") 

#convert freq and data to strings comma-separated and then arrays of floats 
datalist=data.split(',') 
dataarray=np.array(datalist) 
datafloat=dataarray.astype(np.float) 

freqlist=freq.split(',') 
freqarray=np.array(freqlist) 
freqfloat=freqarray.astype(np.float) 

#save data 
output = np.column_stack((freqfloat, datafloat)) 
with open('output.csv','w') as f: 
    writer = csv.writer(f) 
    for row in output: 
     writer.writerow(row) 

Donc, après c'est là que je voudrais créer une fonction de sauvegarde de données que je peux appeler et répéter pour les ensembles de données plus tard. Toute aide est la bienvenue, merci!

Répondre

0

Vous pouvez utiliser le module csv de la bibliothèque standard Python pour écrire des fichiers CSV.

Pour générer un nouveau fichier chaque fois que vous enregistrez des données, vous pouvez générer un nom de fichier avec un numéro. Incrémentez le nombre jusqu'à ce que le fichier n'existe pas encore. Voici une fonction qui enregistre les données consécutivement à prefix_1.csv, prefix_2.csv, etc.:

import csv 
import os 

def save_csv(file_prefix, data): 
    i = 1 
    file_name = file_prefix + '_' + str(i) + '.csv' 
    while os.path.isfile(file_name): 
     i = i + 1 
     file_name = file_prefix + '_' + str(i) + '.csv' 

    with open(file_name, 'w') as csvfile: 
     writer = csv.writer(csvfile) 
     for row in data: 
      writer.writerow(row) 

# Save output to file data_x.csv 
output = np.column_stack((freqfloat, datafloat)) 
save_csv('data', output) 
+0

Je fini par utiliser 'np.savetxt' pour résoudre mon problème, mais cela fonctionne aussi - merci! Avez-vous des conseils sur la création d'une fonction ici pour que je puisse enregistrer plusieurs ensembles de données et ne rien modifier (c'est-à-dire leur donner des noms uniques sans avoir à revenir dans le programme et à le modifier moi-même)? (Reste du code ajouté à la question) –

+0

Changé utiliser 'csv.writer' –

+0

j'ai amélioré la réponse pour illustrer la façon dont les données peuvent être sauvegardées dans un nouveau fichier à chaque appel. – r0the