BubbleSort CSV по указанному столбцу c - PullRequest
0 голосов
/ 29 мая 2020

У меня есть CSV-файл, содержащий несколько строк и столбцов. Я хочу использовать python и пузырьковую сортировку для сортировки файла по указанному столбцу c. Например:

Входной CSV-файл:

Daniel,New York,23456,Gaming
Melinda,Washington,45678,Sports
Dave,Chicago,12345,Hiking
Ross,Boston,34567,Chess

Выход:

Dave,Chicago,12345,Hiking
Daniel,New York,23456,Gaming
Ross,Boston,34567,Chess
Melinda,Washington,45678,Sports

В этом примере строки должны быть отсортированы по третьему столбцу.

До сих пор я могу сортировать только третий столбец, но остальные столбцы остаются на своих местах.

1 Ответ

1 голос
/ 29 мая 2020

Вот реализация, использующая встроенный модуль csv python. Это решение предполагает, что входной файл csv находится в test.csv, и вам нужен вывод в output.csv.

import csv
file = csv.reader(open('test.csv', 'r'))
rows = [row for row in file]


# Python program for implementation of Bubble Sort
# from: https://www.geeksforgeeks.org/python-program-for-bubble-sort/
# modified to sort by the third element in the row per SO question
def bubble_sort(arr):
    n = len(arr)
    # Traverse through all array elements
    for i in range(n - 1):
        # range(n) also work but outer loop will repeat one time more than needed.
        # Last i elements are already in place
        for j in range(0, n - i - 1):
            # traverse the array from 0 to n-i-1
            # Swap if the element found is greater
            # than the next element
            if arr[j][2] > arr[j + 1][2]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]

    return arr


sorted_rows = [', '.join(row)+'\n' for row in bubble_sort(rows)]
with open('output.csv', 'w+') as f:
    f.writelines(sorted_rows)

Примечание: вы также можете использовать pandas для чтения в файле csv и сортировать с использованием более быстрого встроенного алгоритма в pandas!

...