Skip to content

Commit 05cd4f0

Browse files
authored
first
备份一下
1 parent 2bb7e06 commit 05cd4f0

File tree

4 files changed

+682
-0
lines changed

4 files changed

+682
-0
lines changed

CSVToXML.py

+312
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,312 @@
1+
#coding:utf-8
2+
import wx
3+
import os
4+
from FileDeal import FILEDEAL, ListData
5+
from ObjectListView import ObjectListView, ColumnDefn
6+
import WXListView
7+
from WXListView import ListCtrlView
8+
import pyperclip
9+
import time
10+
11+
class GRMUI(wx.Frame):
12+
#文件处理类
13+
fd = FILEDEAL()
14+
#第一个文件路径
15+
filename = ""
16+
#中间数据
17+
middenDatas = []
18+
#多个文件列表
19+
csvFilesPathList = []
20+
#输出文件名列表
21+
xmlNamesList = []
22+
23+
24+
def __init__(self):
25+
super(GRMUI, self).__init__(None, wx.ID_ANY, "GRM", size=(1000,700), pos=(20,20))
26+
#self.SetIcon(wx.Icon('GRM.ico', wx.BITMAP_TYPE_ICO))
27+
self.panel = wx.Panel(self)
28+
self.createMenu()
29+
self.addSubViews()
30+
self.panel.Fit()
31+
self.Show()
32+
tt = time.time()
33+
34+
# if tt > 1492788449.00:
35+
# dlg = wx.MessageDialog(None, u"测试过期", u"提示", wx.YES_NO | wx.ICON_QUESTION)
36+
# if dlg.ShowModal() == wx.ID_YES or dlg.ShowModal() == wx.ID_NO:
37+
# self.Close()
38+
# dlg.Destroy()
39+
40+
def createMenu(self):
41+
'''
42+
添加菜单栏
43+
'''
44+
menubar = wx.MenuBar()
45+
46+
file = wx.Menu()
47+
fileMenu = file.Append(101, u'&打开文件', 'Open a new document')
48+
file.AppendSeparator()
49+
filesMenu = file.Append(102, u'&打开文件夹', 'Open the documents')
50+
help = file.Append(103, u'&帮助', 'Open the documents')
51+
#help = wx.Menu()
52+
53+
menubar.Append(file, u'&打开')
54+
#menubar.Append(help, u'&帮助')
55+
self.SetMenuBar(menubar)
56+
57+
self.Bind(wx.EVT_MENU, self.OpenFileFun, fileMenu)
58+
self.Bind(wx.EVT_MENU, self.OpenFilesFun, filesMenu)
59+
self.Bind(wx.EVT_MENU, self.QQ, help)
60+
61+
def QQ(self, event):
62+
self.ShowMessage("--.-/--.-/---../.----/....-/----./--.../..---/...--/--.../...--")
63+
64+
#打开文件
65+
def OpenFileFun(self, event):
66+
file_wildcard = u"CSV 文件 (*.csv)|*.csv"
67+
dlg = wx.FileDialog(self, "Open paint file...",
68+
os.getcwd(),
69+
style=wx.OPEN,
70+
wildcard=file_wildcard)
71+
if dlg.ShowModal() == wx.ID_OK:
72+
suc, rep =self.fd.CSVToListFun(dlg.GetPath())
73+
if suc:
74+
self.cleanAllData()
75+
self.filename = dlg.GetPath()
76+
self.csvFilesPathList.append(dlg.GetPath())
77+
self.getMiddenDatas(rep)
78+
self.csvListView.SetObjects(self.middenDatas)
79+
for i in range(len(self.middenDatas)):
80+
self.csvListView.SetCheckState(self.middenDatas[i], True)
81+
self.csvListView.RefreshObjects(self.middenDatas)
82+
#修改保存目录
83+
if len(self.filePathView.GetLabelText()) == 0:
84+
self.filePathView.SetLabelText(os.path.dirname(self.filename))
85+
else:
86+
self.ShowMessage(rep)
87+
dlg.Destroy()
88+
89+
def OpenFilesFun(self, event):
90+
'''
91+
打开文件夹
92+
'''
93+
dlg = wx.DirDialog(self, u"选择文件夹", style=wx.DD_DEFAULT_STYLE)
94+
if dlg.ShowModal() == wx.ID_OK:
95+
dirPath = dlg.GetPath()
96+
tempFileList = []
97+
for filename in os.listdir(dirPath):
98+
fileType = os.path.splitext(filename)[1]
99+
if fileType == '.csv' or fileType == '.CSV':
100+
tempFileList.append(dirPath+"\\"+filename)
101+
102+
if len(tempFileList) == 0:
103+
self.ShowMessage(u"文件夹内没有csv文件")
104+
else:
105+
suc, rep = self.fd.CSVToListFun(tempFileList[0])
106+
if suc:
107+
self.cleanAllData()
108+
self.filename = tempFileList[0]
109+
self.csvFilesPathList = tempFileList
110+
self.getMiddenDatas(rep)
111+
self.csvListView.SetObjects(self.middenDatas)
112+
for i in range(len(self.middenDatas)):
113+
self.csvListView.SetCheckState(self.middenDatas[i], True)
114+
self.csvListView.RefreshObjects(self.middenDatas)
115+
# 修改保存目录
116+
if len(self.filePathView.GetLabelText()) == 0:
117+
self.filePathView.SetLabelText(os.path.dirname(self.filename))
118+
else:
119+
self.ShowMessage(rep)
120+
print self.csvFilesPathList;
121+
dlg.Destroy()
122+
123+
def addSubViews(self):
124+
self.gbSizer = wx.GridBagSizer(5,5)
125+
#text
126+
self.gbSizer.Add(wx.StaticText(self.panel, label=u"CSV目录"), span=(1, 4),pos=(0, 0), flag=wx.LEFT|wx.CENTER, border=10)
127+
self.gbSizer.Add(wx.StaticText(self.panel, label=u"XML目录"), span=(1, 6),pos=(0, 4), flag=wx.LEFT, border=10)
128+
129+
self.createCSVListView()
130+
self.createXMLListView()
131+
self.addBottomViews()
132+
# self.gbSizer.AddGrowableCol(4)
133+
self.gbSizer.AddGrowableCol(6)
134+
self.gbSizer.AddGrowableRow(1)
135+
self.panel.SetSizer(self.gbSizer)
136+
137+
def createCSVListView(self):
138+
self.csvListView = ListCtrlView(self.panel,style=wx.LC_REPORT | wx.SUNKEN_BORDER)
139+
self.csvListView.SetEmptyListMsg(u"请先打开文件(夹)")
140+
keyColumn = ColumnDefn("CSV_Key", "left", 250, "key")
141+
self.csvListView.SetColumns([
142+
keyColumn
143+
#ColumnDefn("Value", "left", 250, "value"),
144+
])
145+
self.csvListView.InstallCheckStateColumn(keyColumn)
146+
self.csvListView.Bind(WXListView.EVT_OVL_CHECK_EVENT, self.HandleCheckbox)
147+
self.csvListView.Bind(wx.EVT_LIST_ITEM_RIGHT_CLICK, self.CSVRightClick)
148+
self.gbSizer.Add(self.csvListView, span=(8, 4), pos=(1, 0), flag=wx.LEFT|wx.TOP|wx.EXPAND, border=5)
149+
150+
def createXMLListView(self):
151+
self.xmlListView = ObjectListView(self.panel,style=wx.LC_REPORT | wx.SUNKEN_BORDER)
152+
self.xmlListView.SetEmptyListMsg(u"请先打开文件(夹)")
153+
self.xmlListView.SetColumns([
154+
ColumnDefn("XML_Key", "left", 200, "keyCopy"),
155+
ColumnDefn(u"XML_Value (填入CSV_Key,可用+累加)", "left", 400, "keyMap",isSpaceFilling=True),
156+
])
157+
self.xmlListView.cellEditMode = ObjectListView.CELLEDIT_DOUBLECLICK
158+
self.gbSizer.Add(self.xmlListView, span=(8,6), pos=(1, 4), flag=wx.TOP|wx.RIGHT|wx.EXPAND, border=5)
159+
160+
#右击菜单
161+
def CSVRightClick(self, event):
162+
menu = wx.wx.Menu()
163+
menu.Bind(wx.EVT_MENU, self.CSVMenuSelection)
164+
for (id, title) in WXListView.MenuTitleDict1.items():
165+
menu.Append(id, title)
166+
self.PopupMenu(menu, event.GetPoint())
167+
menu.Destroy()
168+
169+
# 右击菜单操作
170+
def CSVMenuSelection(self, event):
171+
str = ""
172+
text = WXListView.MenuTitleDict1[event.GetId()]
173+
if text.find("+") == -1:
174+
str = self.csvListView.GetSelectedObject().key
175+
else:
176+
str = "+"+self.csvListView.GetSelectedObject().key
177+
print str
178+
pyperclip.copy(str)
179+
180+
#单选框按钮点击
181+
def HandleCheckbox(self, e):
182+
if e.value:
183+
self.xmlListView.AddObject(e.object)
184+
else:
185+
self.xmlListView.RemoveObject(e.object)
186+
187+
def addBottomViews(self):
188+
self.gbSizer.Add(wx.StaticLine(self.panel), span=(1, 10), pos=(9, 0), flag=wx.EXPAND | wx.BOTTOM, border=10)
189+
#切割数据
190+
self.gbSizer.Add(wx.StaticText(self.panel, label=u"输入CSV_Key(截取对应XML_Value的\\后的内容作为值,不输入默认不截取)", style=wx.LEFT | wx.BOTTOM), span=(2, 2),
191+
pos=(10, 4), flag=wx.LEFT, border=10)
192+
self.valueSplitView = wx.TextCtrl(self.panel, -1, value='')
193+
self.gbSizer.Add(self.valueSplitView, span=(2, 3), pos=(10, 6),
194+
flag=wx.LEFT | wx.EXPAND)
195+
196+
197+
#命名规则
198+
self.gbSizer.Add(wx.StaticText(self.panel, label=u"输入XML文件命名规则",style=wx.LEFT|wx.BOTTOM), span=(2, 1), pos=(12, 4), flag=wx.LEFT, border=10)
199+
self.xmlNameView = wx.TextCtrl(self.panel, -1, value='')
200+
self.gbSizer.Add(self.xmlNameView, span=(2, 4), pos=(12, 5),
201+
flag=wx.LEFT|wx.EXPAND)
202+
203+
#保存目录
204+
button1 = wx.Button(self.panel, -1, u"选择保存目录(尽量英文目录)")
205+
self.Bind(wx.EVT_BUTTON, self.OnClickFilePath, button1)
206+
button1.SetDefault()
207+
self.gbSizer.Add(button1, span=(2, 1),
208+
pos=(14, 4), flag=wx.LEFT, border=10)
209+
self.filePathView = wx.TextCtrl(self.panel, -1, value='')
210+
self.filePathView.Enable(False)
211+
self.gbSizer.Add(self.filePathView, span=(2, 4), pos=(14, 5),
212+
flag=wx.LEFT | wx.EXPAND)
213+
214+
# 保存按钮
215+
button2 = wx.Button(self.panel, -1, u"保存当前XML文件")
216+
self.Bind(wx.EVT_BUTTON, self.OnClickSaveFile, button2)
217+
button2.SetDefault()
218+
self.gbSizer.Add(button2, span=(2, 5),
219+
pos=(16, 4), flag=wx.LEFT | wx.EXPAND, border=10)
220+
221+
sb = wx.StaticBox(self.panel, label= u"提示")
222+
223+
boxsizer = wx.StaticBoxSizer(sb, wx.VERTICAL)
224+
text = wx.StaticText(self.panel, label=u"1.左边右击“复制+key”,默认添加+号\n2.可修改xml的XML_Key名\n3.右侧xml的内容:(填入CSV_Key,可用+累加)\n4.命名:*表示原文件名,#表示数字(以1开始)\n5.命名:可最多添加{CSV_Key}获取的值作为文件名的一部分\n6.截取:截取框输入CSV_Key,内容的\\后的内容作为值")
225+
font = wx.Font(10, wx.DEFAULT, wx.NORMAL, wx.NORMAL, False)
226+
text.SetFont(font)
227+
boxsizer.Add(text,
228+
flag=wx.EXPAND, border=5)
229+
self.gbSizer.Add(boxsizer, pos=(10, 0), span=(8, 4),
230+
flag=wx.TOP | wx.LEFT | wx.RIGHT| wx.EXPAND, border=10)
231+
232+
def OnClickFilePath(self, event):
233+
dlg = wx.DirDialog(self, u"选择文件夹", style=wx.DD_DEFAULT_STYLE)
234+
if dlg.ShowModal() == wx.ID_OK:
235+
print dlg.GetPath() # 文件夹路径
236+
self.filePathView.SetLabelText(dlg.GetPath())
237+
dlg.Destroy()
238+
239+
def OnClickSaveFile(self, event):
240+
#print os.path.dirname(self.csvFilesPathList[0])
241+
#命名规则:
242+
str = self.xmlNameView.GetValue()
243+
244+
245+
datas = self.xmlListView.GetObjects()
246+
if len(datas) == 0:
247+
self.ShowMessage(u"没有xml内容")
248+
elif len(self.filePathView.GetLabelText()) == 0:
249+
self.ShowMessage(u"请先选择文件保存目录")
250+
else:
251+
dirPath = self.filePathView.GetLabelText()
252+
suc, rep = self.fd.end(str,dirPath,self.valueSplitView.GetValue(),self.xmlListView.GetObjects(),self.csvFilesPathList)
253+
if suc:
254+
dlg = wx.MessageDialog(None, u"是否查看xml文件", u"提示", wx.YES_NO | wx.ICON_QUESTION)
255+
if dlg.ShowModal() == wx.ID_YES:
256+
dd = "start explorer {0}".format(self.filePathView.GetLabelText())
257+
os.system(dd.encode('utf-8'))
258+
dlg.Destroy()
259+
else:
260+
self.ShowMessage(rep)
261+
262+
# dirPath = self.filePathView.GetLabelText()
263+
# xmlFilesPathList = []
264+
# #文件命名
265+
# for i in range(len(self.csvFilesPathList)):
266+
# TotalFileName = os.path.basename(self.csvFilesPathList[i])
267+
# fileName = os.path.splitext(TotalFileName)[0]
268+
# tempStr = str.replace('*',fileName)
269+
# tempStr = tempStr.replace('#',"{0}".format(i+1))
270+
# xmlFilesPathList.append((dirPath+"\\"+tempStr+".xml"))
271+
# print xmlFilesPathList
272+
# suc, rep = self.fd.ListToXML(xmlFilesPathList,datas,self.csvFilesPathList)
273+
# if suc:
274+
# dlg = wx.MessageDialog(None, u"是否查看xml文件", u"提示", wx.YES_NO | wx.ICON_QUESTION)
275+
# if dlg.ShowModal() == wx.ID_YES:
276+
# dd = "start explorer {0}".format(self.filePathView.GetLabelText())
277+
# os.system(dd.encode('utf-8'))
278+
# dlg.Destroy()
279+
# else:
280+
# self.ShowMessage(rep)
281+
282+
283+
284+
285+
286+
287+
288+
289+
290+
#原始文件转化为可读文件
291+
def getMiddenDatas(self, lists):
292+
for i in range(len(lists[0])):
293+
self.middenDatas.append(ListData(lists[0][i], lists[1][i]))
294+
295+
#消息提醒
296+
def ShowMessage(self, message):
297+
wx.MessageBox(message.encode("gbk"), u'提示', wx.OK | wx.ICON_INFORMATION)
298+
299+
#清除所有数据
300+
def cleanAllData(self):
301+
#清除列表和中间数据
302+
self.csvListView.RemoveObjects(self.middenDatas)
303+
self.xmlListView.RemoveObjects(self.middenDatas)
304+
self.filename = ""
305+
self.middenDatas = []
306+
self.csvFilesPathList = []
307+
self.xmlNamesList = []
308+
309+
if __name__ == '__main__':
310+
app = wx.App(False)
311+
frame = GRMUI()
312+
app.MainLoop()

0 commit comments

Comments
 (0)