2010-07-23 7 views
0

J'essaie d'écrire une application en utilisant Python 2.7 qui permettra à l'utilisateur d'ouvrir une boîte de dialogue, de choisir un fichier, de le lire dans une structure quelconque (ArrayList, List, etc. ..) ouvert aux suggestions ici et ensuite de trouver des mesures statistiques de base à partir des données (des choses comme la moyenne, l'écart type etc ...) et de sortir le fichier original avec un résumé des mesures statistiques au format XML. Je me demandais juste comment est le meilleur moyen d'accomplir cela. J'ai le code pour ouvrir une fenêtre pour permettre à un utilisateur de choisir un fichier (d'un autre site Web) mais je ne sais pas comment l'utiliser pour passer le fichier sélectionné dans la fonction qui lira le fichier xml sélectionné.XML Question relative à Java et Python

Voici le code de la fenêtre:

from Tkinter import * 
from tkMessageBox import * 
from tkColorChooser import askcolor    
from tkFileDialog import askopenfilename  

def callback(): 
    askopenfilename() 
    Button(text='Please Select File', command=callback).pack(fill=X) 
    mainloop() 
    pass 
def quit(event): 
    if tkMessageBox.askokcancel('Quit','Do you really want to quit?'): 
    root.destroy() 

Je pense qu'il est plus à la fonction de passe.

J'ai une version du XMLReader en Java (qui est géré en BlueJ donc je ne sais pas si elle va manquer côté de celui-ci) Code:

import java.util.*; 
import java.io.File; 
import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 

public class XMLReader 
    { 
     public static void main(String argv[]) { 
     ArrayList XTimeStamp = new ArrayList(); 
     ArrayList XY = new ArrayList(); 
     ArrayList Price = new ArrayList(); 

     try { 
      File file = new File("<PATH>\shares.xml"); 
      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
      DocumentBuilder db = dbf.newDocumentBuilder(); 
      Document doc = db.parse(file); 
      doc.getDocumentElement().normalize(); 
      System.out.println("Root element " + doc.getDocumentElement().getNodeName()); 
      NodeList nodeLst = doc.getElementsByTagName("shareprice"); 
      System.out.println("Share Price"); 

    for (int s = 0; s < nodeLst.getLength(); s++) { 

     Node fstNode = nodeLst.item(s); 
     if (fstNode.getNodeType() == Node.ELEMENT_NODE) { 
     Element fstElmnt = (Element) fstNode; 
     NodeList fstNmElmntLst = fstElmnt.getElementsByTagName("timeStamp"); 
     Element fstNmElmnt = (Element) fstNmElmntLst.item(0); 
     NodeList fstNm = fstNmElmnt.getChildNodes(); 
     String timeStamp = fstNm.item(0).getNodeValue(); 
     XTimeStamp.add(timeStamp); 
     System.out.println("timeStamp : " + ((Node) fstNm.item(0)).getNodeValue()); 
     NodeList lstNmElmntLst = fstElmnt.getElementsByTagName("Price"); 
     Element lstNmElmnt = (Element) lstNmElmntLst.item(0); 
     NodeList lstNm = lstNmElmnt.getChildNodes(); 
     String YValue = lstNm.item(0).getNodeValue(); 
     Price.add(YValue); 
     System.out.println("Price : " + ((Node) lstNm.item(0)).getNodeValue()); 
       } 
      } 
      } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    System.out.println(XTimeStamp); 
    System.out.println(Price); 
    XY.add (XTimeStamp); 
    XY.add (Price); 
System.out.println(XY); 
    } 
} 

La seule chose que je n'aime pas à propos du code Java est que je dois inclure le chemin du fichier. Je voudrais permettre à l'utilisateur de choisir le fichier dans la version Java. La raison pour laquelle j'ai commencé avec Java est que j'ai un peu plus d'expérience (mais pas beaucoup). Pour créer l'application, quelle est la meilleure façon d'avancer, Python ou Java et en fonction de l'aide que vous obtiendrez pour commencer à trier les problèmes serait grandement appréciée.

Répondre

1

Eh bien, vous pouvez le faire en Python ou en Java sans trop de difficulté, mais je déciderais de celui que vous voulez! Je parlerai de Python parce que je préfère de loin Java, mais je suis sûr que vous pouvez trouver des gens qui vous aideront avec Java.

Donc d'abord, vous voulez une boîte de sélection de fichier avec Tkinter. Eh bien, c'est assez standard et il y a beaucoup de documentation et de code sur Google. Essayez:

import Tkinter,tkFileDialog 

root = Tkinter.Tk() 
file = tkFileDialog.askopenfile(parent=root,mode='rb',title='Choose a file') 

pour les démarreurs; vous pouvez le rendre beaucoup plus compliqué si vous le souhaitez. Ensuite, pour analyser le fichier que vous pouvez utiliser le module xml.parsers.expat Python:

import xml.parsers.expat 
xmlparser.ParseFile(file) 

Vous devez écrire des fonctions pour ce qu'il faut faire lorsque l'analyseur se réunit chaque type de noeud, mais qui est dans la documentation. Ensuite, vous voulez faire des statistiques sur ce que vous analyser; scipy a toutes les fonctions dont vous aurez besoin pour le faire. C'est le bit où vous aurez besoin de rouler votre propre code le plus.

Enfin, vous voulez écrire les statistiques que vous avez générées dans un nouveau fichier (je pense?).

statsfile = open("stats.txt", w) 
try: 
    statsfile.write(stats) 
finally:  
    statsfile.close() 

Cela aide-t-il?

+0

Je préférerais Python du petit je sais que cela semble plus facile que Java dans le sens où vous n'avez pas trop de soucis à propos de la déclaration des types de variables et la syntaxe est plus facile à suivre. Mais comme la plupart des programmes, ce n'est pas exactement pour mon usage personnel (je ferai remarquer que je ne reçois pas d'argent pour cela, c'est pour un ami qui veut l'ajouter à un site Web qu'il utilise pour un club). En ce qui concerne le fichier de sortie, si je pouvais en quelque sorte ajouter les informations statistiques dans le fichier xml d'origine serait la solution idéale. Comme la sortie de cette partie est de devenir l'entrée dans ce qu'il travaille. – Rebel

+0

Etes-vous sûr de vouloir ajouter les données de statistiques dans l'ancien fichier? Je pense qu'il serait plus agréable de faire un nouveau fichier, éventuellement en format XML, et de donner à votre ami à analyser. Etes-vous sûr de vouloir utiliser XML pour communiquer avec votre ami? C'est un peu, bon, maladroit à cet effet, surtout si vous n'avez pas autant de données à envoyer en premier lieu. Vous pourriez simplement écrire un fichier texte, qui pourrait être plus facile à gérer. Si vous êtes sûr de vouloir utiliser XML, jetez un oeil à http://www.postneo.com/projects/pyxml/ pour un exemple d'utilisation de 'xml.dom.minidom'. – katrielalex