MyDialog
は参考サイトをコピペしました.
ありがたく使わせてもらってます~
import pandas as pd
import wx
app = wx.App()
check_items = [
"列名の出力",
"行名の出力",
"インデックス名の出力",
"行名の太字化"
]
class MyDialog(wx.Dialog):
def __init__(self):
wx.Dialog.__init__(self, None, -1, 'Title', size=(200,160))
# Add components.
self.check = wx.CheckListBox(self, wx.ID_ANY,
choices=check_items,
name='チェック')
btnOk = wx.Button(self, wx.ID_OK)
btnOk.SetDefault()
#btnCancel = wx.Button(self, wx.ID_CANCEL)
# Set button sizer.
btns = wx.StdDialogButtonSizer()
btns.AddButton(btnOk)
btns.Realize()
# Set main sizer.
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(self.check, 1, wx.EXPAND|wx.ALL, 3)
sizer.Add(btns, 0, wx.EXPAND|wx.ALL, 5)
self.SetSizer(sizer)
# 項目のチェック
def ask_check():
with MyDialog() as dlg:
if dlg.ShowModal() == wx.ID_OK:
return [dlg.check.IsChecked(item) for item,name in enumerate(check_items)]
# ファイルの選択
def choice_file():
# ファイル選択ダイアログを作成
with wx.FileDialog(None, u'ファイル選択してください', wildcard="csv files (*.csv)|*.csv",
style=wx.FD_OPEN | wx.STAY_ON_TOP | wx.FD_MULTIPLE) as dialog:
res = dialog.ShowModal()
if res == wx.ID_CANCEL:
import sys
sys.exit()
elif res == wx.ID_OK:
# ファイルが選択されたとき
csvlist=dialog.GetPaths()
if type(csvlist) == list:
return csvlist
else:
return [csvlist]
# 保存先フォルダを選択
def choice_folda():
wx.MessageBox('保存先フォルダを選択してください','フォルダ選択',wx.STAY_ON_TOP)
# フォルダ選択ダイアログを作成
with wx.DirDialog(None,style=wx.DD_CHANGE_DIR | wx.OK | wx.STAY_ON_TOP,
message="保存先フォルダ") as folda:
# フォルダが選択されたとき
if folda.ShowModal() == wx.ID_OK:
return folda.GetPath()
def convert(path):
import os
header,index,bold_rows,index_names = ask_check()
table = pd.read_csv(path)
if table.shape[0] > 44:
longtable=True
else:
longtable=None
#print(header,index,bold_rows,index_names,longtable)
table.to_latex(
buf=os.path.join(choice_folda(),path.split(os.path.sep)[-1].split(".")[0]+".tex"),
header=header,
index=index,
index_names=index_names,
bold_rows=bold_rows,
caption="",
longtable=longtable
)
def csv2latex(files:list):
for path in files:
convert(path)
if __name__ == "__main__":
files = choice_file()
csv2latex(files)
Pandas
でcsvを読み込んで,Pandas
のメソッドで[tex:\LaTeX]の表として出力する一連のスクリプトです.
作成された[tex:\LaTeX]の表を使うには
\usepackage{booktabs} \usepackage{longtable}
というようにパッケージを読み込んでおいてください.
Pandas
はwx
の前にimport
してください.
wx
を先にimport
すると環境がja-JPになるようで,
これだとPandas
がエラーになります.
index_names
がよく分かりません...あってもなくてもどっちでも良いかなと思います.
以上はcsvファイルでなくとも,pandas
で取り扱えるデータ形式ならば使えます.
pandas
はtsvファイルを読み込むメソッドもあるはずなのでtsvはできるでしょう.
また,リストや辞書型もpd.DataFrame()
にツッコめばcsvと同様に変換できますね~