
Pandas を使用しないソート
GO とほとんど変わらないコードとなりました。
import csv
def getposi(elements, left, right):
    pivot1 = elements[right][0]
    pivot2 = elements[right][1]
    i = left
    for j in range (left, right):
        if elements[j][0] < pivot1:
            swap(elements[i],elements[j])
            i += 1
        elif elements[j][0] == pivot1:
            if elements[j][1] < pivot2:
                swap(elements[i],elements[j])
                i += 1
    swap(elements[i],elements[right])
    return i
def swap(elements1, elements2):
    for j in range (0, len(elements1)):
        temp = elements1[j]
        elements1[j] = elements2[j]
        elements2[j] = temp
def quicksort(elements, left, right):
    if left < right:
        posi = getposi(elements, left, right)
        quicksort(elements, left, posi-1)
        quicksort(elements, posi+1, right)
def main():
    filename = './input.csv'
    with open(filename, "r", encoding="shift-jis", newline='') as f:
        csvreader = csv.reader(f)
        elements = [row for row in csvreader]
    quicksort(elements, 0, len(elements)-1)
    filename = './output.csv'
    with open(filename, 'w', encoding="shift-jis", newline='') as f:
        csvwriter = csv.writer(f)
        csvwriter.writerows(elements)
main()
ただ、出力されるまでに20数秒要しています。
NumPy を使わないと時間がかかるようです。
しかし、令和4年8月23日投稿の「VBAでクイックソート その2」では40秒かかっているので、Python はかなり早いといえます。
CSV ファイルの読み込み
input.csv をエンコードを指定して読み込みます。
scv.reader は与えられファイル内の行を反復処理するような reader オブジェクトを返します。
そして、そのオブジェクトから内包表記でリストを作成します。
import csv
filename = './input.csv'
with open(filename, "r", encoding="shift-jis", newline='') as f:
    csvreader = csv.reader(f)
    elements = [row for row in csvreader]
elementsそのリストを見てみると次の画像のようになっています。
この画像は、JupyterLab の作業の途中のものです。
elements がリストを入れ子にしたリストであることが分かります。

こうなれば、2次元のリストのアクセスで処理ができますので、GO の場合の処理と全く同じになります。