2010-07-23 4 views
0

사용자가 대화 상자를 열고 파일을 선택하고 일부 정렬 구조 (ArrayList, List 등)를 읽도록 허용하는 Python 2.7을 사용하여 응용 프로그램을 작성하려고합니다. ..) 여기에 제안을 한 다음 데이터 (평균, 표준 편차 등)로부터 기본적인 통계적 조치를 찾고 원본 파일을 XML 형식의 통계 측정 요약으로 출력 할 수 있습니다. 이 작업을 수행하는 가장 좋은 방법은 궁금합니다. 사용자가 다른 웹 사이트에서 파일을 선택할 수 있도록 창을 열지 만 선택한 파일을 선택한 XML 파일을 읽는 함수에 전달하는 방법을 모르겠습니다. 내가 패스 기능에 이상이 있다고 생각XML에 관한 Java 및 Python 관련 질문

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

: 여기

창에 대한 코드입니다.

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

이 한 가지 내가 좋아하지 않는다 :

나는 코드를 (그것의 측면을 실행하면 너무 모르는 그 BlueJ의에서 실행) 자바에서의 XMLReader의 버전이 Java 코드에 대해서는 파일의 경로를 포함해야한다는 것입니다. 사용자가 자바 버전에서도 파일을 선택할 수 있도록하고 싶습니다. 내가 자바로 시작한 이유는 조금 더 많은 경험이 있다는 것입니다. 응용 프로그램을 만들려면 최선의 방법은 무엇인지, 파이썬이나 자바 그리고 문제에 대한 정렬을 시작하는 데 어떤 도움을 주느냐에 따라 크게 달라질 수 있습니다.

답변

1

글쎄, 당신은 너무 어려움없이 파이썬이나 자바에서 이것을 할 수 있지만, 나는 당신이 원하는 것을 마음대로 결정할 것이다! 파이썬에 대해서는 자바에 대해 많이 선호하기 때문에 이야기하겠습니다.하지만 자바로 도움을 줄 수있는 사람들을 찾을 수있을 것이라고 확신합니다.

먼저 파일 선택 상자에 Tkinter을 입력합니다. 글쎄, 그건 꽤 표준이며 많은 문서와 코드 보일러가 구글에있다. 시도 :

import Tkinter,tkFileDialog 

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

; 원한다면 훨씬 더 복잡하게 만들 수 있습니다. 그럼 당신은 파이썬의 xml.parsers.expat 모듈을 사용할 수있는 파일을 구문 분석 : 당신은 파서가 노드의 각 유형을 만날 때 무엇을해야하는지에 대한 함수를 작성해야합니다

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

을하지만, 그 문서에 있습니다. 그런 다음 구문 분석에 대한 통계를 원합니다. scipy에는 지금까지해야 할 모든 기능이 있습니다. 이 코드는 자신의 코드를 가장 많이 사용해야하는 곳입니다.

마지막으로, 생성 한 통계를 새 파일에 기록하고 싶습니다 (제 생각 엔?).

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

그게 도움이 되나요?

+0

나는 작은 것에서 파이썬을 선호한다. 자바보다 더 쉬운 것처럼 느껴진다는 점에서 변수 유형을 선언하는 것에 대해 많은 걱정을하지 않아도되고 구문을 이해하기가 더 쉽다. 그러나 대부분의 프로그램과 마찬가지로 이것은 내 용도로만 사용되는 것이 아닙니다 (나는 클럽을 위해 운영하는 웹 사이트에 추가하고 싶은 친구를 위해 돈을받지 못한다는 것을 지적합니다). 출력 파일에 관해서는 어떻게 든 원래의 XML 파일에 통계 정보를 추가 할 수 있다면 이상적인 솔루션이 될 것입니다. 이 부분의 결과물은 그가 작업하고있는 것의 입력이됩니다. – Rebel

+0

이전 파일에 통계 데이터를 추가 하시겠습니까? 필자는 XML 형식의 새로운 파일을 만들고 분석 할 친구를 제공하는 것이 더 좋을 것이라고 생각합니다. 또한 XML을 사용하여 친구와 통신 하시겠습니까? 이 목적을 위해 약간, 잘, clunky, 특히 당신이 그다지 첫 번째 장소에 보낼 데이터가없는 경우. 당신은 처리하기 쉬운 일반 텍스트 파일을 작성할 수 있습니다. XML을 사용하려면 'http://www.postneo.com/projects/pyxml/'에서'xml.dom.minidom'을 사용하는 방법을 살펴보십시오. – katrielalex