python學習:讀寫文件和字典排序
- 2020 年 1 月 9 日
- 筆記
今天來做一個題目,有一個文件,內容如下:
[root@Virtual python]# cat a.csv 源文件 2004-5-27,2,3,2,3 2004-5-27,872,0,872,0 2004-5-27,1872,0,872,0 2004-5-27,3872,0,872,0 2004-5-27,9872,0,872,0 2004-5-29,1762,24,1762,24 2004-5-28,2011,20,2011,20
需求是對文件內容的第二列內容進行排序,排序之後如下顯示:
- [root@Virtual python]# cat b.csv
- 2004-5-27,2,3,2,3
- 2004-5-27,872,0,872,0
- 2004-5-29,1762,24,1762,24
- 2004-5-27,1872,0,872,0
- 2004-5-28,2011,20,2011,20
- 2004-5-27,3872,0,872,0
- 2004-5-27,9872,0,872,0
下面講下我的解題思路,首先把文件內容讀入到一個列表,然後提取需要排序的第二列的欄位值到另外一個列表裡面,2個列表組成一個字典,然後對字典按照值來進行排序,
下面來看看腳本吧,注釋寫的比較清晰了:
[root@Virtual python]# cat xiecvs.py #!/usr/bin/env python f=open('a.csv') aa={} bb=[] k=[] for i in f.readlines(): bb.append(i.split('n')) 把文件內容讀入列表 k.append(i.split(',')[1]) 吧需要拍下的列的內容加入到一個列表 for i in range(0,len(bb)): aa[bb[i][0]]=int(k[i]) 生成一個字典,鍵是文件內容,值是需要排序的內容 f.close() cc=sorted(aa.items(),key=lambda aa:aa[1]) 對字典進行按照值來排序,返回值是個列表 g=open('b.csv','w+') for i in range(0,len(cc)): g.write(cc[i][0] + "n") 吧列表內容按照一定順序寫入新的文件 g.close() [root@Virtual python]#
腳本比較粗糙,如果有更好的法子,請不吝賜教。。。。