そのため、スプレッドシートを並べ替えたい特定の列を持つExcelスプレッドシートがあります。列には、開始文字 B、C、E の 3 つの異なる組み合わせがあります。B、E、C で始まるすべての行で並べ替えたいと思います。列からテーブル全体を並べ替える必要があります。
Pythonでこれを行う方法を知っている人はいますか?
そのため、スプレッドシートを並べ替えたい特定の列を持つExcelスプレッドシートがあります。列には、開始文字 B、C、E の 3 つの異なる組み合わせがあります。B、E、C で始まるすべての行で並べ替えたいと思います。列からテーブル全体を並べ替える必要があります。
Pythonでこれを行う方法を知っている人はいますか?
シートを行のリストに読み込みます。lst
特定の列の列インデックスはindex
です。
import xlrd
wb = xlrd.open_workbook('myworkbook.xls')
sh = wb.sheet_by_index(0)
lst = [sh.row(n) for n in xrange(sh.nrows)]
searchdict = dict(B=1, E=2, C=3)
lst.sort(key=lambda row: searchdict.get(row[index][0], 4))
最後の行の[0]
は、フィールドの最初の文字にアクセスし、辞書で検索します。引数のデフォルト値 4 は、dict.get
適合しないすべての行を新しいリストの最後に置きます。詳細にはテストされていませんが、アイデアは得られるはずです。
xlsファイルを列ごとにソートし、Pythonを使用して行全体で別のファイルに書き込む方法のようなものを使用できますか?
そして、あなたのソート機能(キー)では、比較のためにこのようなことをします(テストされていない、エラーチェックを追加します)。__gt__ と __lt__ を実装したい場合、基本的には > を < に切り替えたものと同じです。
order = ['B','E','C'] #Set the order for the first letter here
def gt( a, b ):
if a[0] == b[0]:
return a > b #Same letter, use normal sorting
else:
return order.index(a[0]) > order.index(b[0]) #Sort using first letter
注: あなたの質問が最初の文字を通過する並べ替えを求めていない場合は、他の回答を使用してください。