Вопрос XML, касающийся Java и Python - PullRequest
0 голосов
/ 23 июля 2010

Я пытаюсь написать приложение на Python 2.7, которое позволит пользователю открыть диалоговое окно, выбрать файл, прочитать его в какой-либо структуре (ArrayList, List и т. Д.), Открытой для предложений здесь а затем найти основные статистические показатели из данных (например, среднее значение, стандартное отклонение и т. д.) и вывести исходный файл со сводкой статистических измерений в формате XML. Просто интересно, как лучше всего это сделать. У меня есть код для открытия окна, чтобы позволить пользователю выбрать файл (с другого веб-сайта), но я не уверен, как использовать его для передачи выбранного файла в функцию, которая будет читать выбранный файл XML.

Вот код для окна:

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()

Я думаю, что есть еще функция прохода.

У меня есть версия XMLReader на Java (которая запускается в BlueJ, поэтому не знаю, выйдет ли она за ее пределы) код:

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);
  }
}

Единственное, что мне не нравится в коде Java, - это то, что мне нужно указать путь к файлу. Я хотел бы позволить пользователю выбрать файл в версии Java, а также. Причина, по которой я начал с Java, в том, что у меня немного больше опыта (но не очень). Чтобы создать приложение, которое является лучшим способом продвижения вперед, Python или Java, и в зависимости от того, какая из них поможет начать работу по сортировке проблем, будет принята с благодарностью.

1 Ответ

1 голос
/ 23 июля 2010

Ну, вы можете сделать это на Python или Java без особых затруднений, но я бы определился с тем, какой вы хотите! Я буду говорить о Python, потому что я предпочитаю его Java, но я уверен, что вы можете найти людей, которые помогут вам с Java.

Итак, во-первых, вам нужно поле выбора файла с Tkinter. Ну, это довольно стандартно, и в Google есть много документации и шаблонного кода. Попробуйте:

import Tkinter,tkFileDialog

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

для начинающих; Вы можете сделать это намного сложнее, если хотите. Затем для разбора файла вы можете использовать модуль Python * xml.parsers.expat:

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

Вам придется писать функции для того, что делать, когда парсер встречает каждый тип узла, но это в документации. Затем вы хотите сделать некоторую статистику о том, что вы анализируете; scipy имеет все функции, которые вам когда-либо понадобятся для этого. Это тот бит, где вам нужно будет развернуть свой собственный код.

Наконец, вы хотите записать сгенерированную вами статистику в новый файл (я думаю?).

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

Это помогает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...