2016-12-21 21 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) 

をiはソート(リーダ、キー=ラムダX:[0] X)を考え仕事をするが、そのないであろう。 助けてください。事前

答えて

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 

同じ列のデータ間に一貫性があった場合は、この行 `reader = sorted(reader、key = lambda x:x [2])`は常に列をソートしているので、列のソートによって失われています

+0

すべての行を左から右にソートする方法は? – Lucas

+0

質問が間違っています。編集されました。 –

+0

'の行の場合: _csv.Error:引用符で囲まれていないフィールドに改行文字が表示されている - ファイルをユニバーサル改行モードで開く必要がありますか?' – Lucas