2016-12-21 2 views
0

Моих уроков с питоном продолжается, и им застряло с этим упражнением, где у меня есть такой CSV:CSV файла строк по столбцам в питоне без панд

John^Reporter^Angola 
Mary^Engineer^Canada 
Anna^Manager^India 

и хотел бы добиться этого:

Angola^John^Reporter 
Canada^Engineer^Mary 
Anna^India^Manager 

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

Я пытался с этим кодом:

with open('file.csv', 'r') as sortrow: 
    reader = csv.reader(sortrow.readlines(), delimiter='^') 
    reader = sorted(reader, key=lambda x: x[0]) 
    with open(syspath+temppath+'/added5.csv', 'w') as sortwrite: 
     writer = csv.writer(sortwrite, delimiter='^') 
     for row in reader: 
      writer.writerow(row) 

я думал, сортируется (читатель, ключ = лямбда-х: [0]) будет делать работу, но ее нет. Пожалуйста, помогите. Заранее спасибо

ответ

1

С reader = sorted(reader, key=lambda x: x[0]) ваш ключ является первым столбцом (x[0]).

В вашем случае, если вы не хотите, чтобы отсортировать строки, но столбцы, так

1) не сортировать читателя

2) просто сделать это:

for row in reader: 
     writer.writerow(sorted(row)) 

полный фиксированный код:

with open('file.csv', 'rU') as sortrow: 
    reader = csv.reader(sortrow, delimiter='^') # don't use readlines() 
    with open(syspath+temppath+'/added5.csv', 'w', newline='') as sortwrite: 
     writer = csv.writer(sortwrite, delimiter='^') 
     for row in reader: 
      writer.writerow(sorted(row)) # sort done here 

Следует отметить, что если между данными тех же столбцов была согласованность, теряется в столбце sort

+0

так что эта строка 'reader = sorted (reader, key = lambda x: x [2])' всегда сортирует столбцы? то как сортировать каждую строку слева направо? – Lucas

+0

Я неправильно понял ваш вопрос. Ред. –

+0

'для строки в считывателе: _csv.Error: символ новой строки, видимый в некотируемом поле - вам нужно открыть файл в режиме универсальной-новой строки?' – Lucas

Смежные вопросы