python中csv库_关于python 自带csv库的使用心得 附带操作实例以及excel下乱码的解决...
因為上次幫我們產品處理過一個文件,他想生成能excel處理操作的。但是上次由于時間非常緊張,所以并沒有處理好。
正好無聊就來好好研究一下 ,找算法要了幾個 csv文件。來好好玩一玩。
全篇使用了python自帶的csv的庫
import csv
csv.reader(csvfile[, dialect='excel'][, fmtparam])
csv.writer(csvfile, dialect='excel', **fmtparams)
以及兩個我沒有嘗試的字典讀寫方法,有興趣的可以參照官方文檔。
要來的文件用ide打開粗略一看是這樣。
這里可以比較明顯的注意到,這是我編譯器ji進行的換行,所以其實在生成它們的時候并沒有做換行處理。這其實非常糟糕。。給格式化操作帶來了難度。
所以在excel中看應該是這樣
一行到底,根本毫無可讀性。。 而且這里注意,我們可以發現里面的中文字符已經可以正常顯示了,而使用過csv或者有過類似操作經驗的同學肯定遇到過,在生成csv后用excel打開中文字符都顯示為亂碼,而讓人不知所措。
這里就要提到一個叫BOM(\xef\xbb\xbf)的東西。
可以參考一下這篇文章:http://segmentfault.com/a/1190000004321605
加上bom之后,就能被excel正確讀取和識別了。這里注意,其實使用osx下的記事本或者別的ide或者是文本編輯器打開本身都沒有什么問題。。但是excel就是需要bom。。哎沒辦法。本人測試了許多情況,似乎加上了bom也不會對原文本造成什么奇怪的影響。
這里我們使用這樣的代碼來給一個csv文件加上bom
defadd_bom():
filename= 'issue_item_daily_stats.csv'with open('{filename}'.format(filename=filename), 'r+b') as file:
file.writelines('\xef\xbb\xbf')
隨后我們要做的就是把全部在一行的csv,格式化成我們想要的樣子。 這里我直接貼一段我操作的代碼 大家感受一下。
defread_format_csv():
filename= 'issue_item_daily_stats_part1.csv'write_filename= 'change2.csv'with open('{filename}'.format(filename=filename), 'rb') as csv_file:
csv_reader=csv.reader(csv_file)
with open('{write_filename}'.format(write_filename=write_filename), 'wb') as write_file:
items=[]
csv_writer= csv.writer(write_file, dialect='excel')
csv_writer.writerow(["\xef\xbb\xbf"])for line incsv_reader:for index, i inenumerate(line):if index ==0:
items.append(i)continue
if index % 9 ==0:
csv_writer.writerow(items)
items=[]
items.append(i)else:
items.append(i)
這里的主要思路就是,從原文件中讀取出需要格式化的信息,暫時保存在csv_reader里。然后重新打開一個文件,將csv_reader里獲得的東西重新寫入到新的文件里,下面可以看到我使用for循環對他進行遍歷。
這里注意我在打開新文件的時候,就已經在頭部寫入了bom('\xef\xbb\xbf'),然后遍歷csv_reader。這里csv_reader其實是每一行的一個迭代器對象。因為我們只有一行。然后遍歷到的也就是第一行來得到一個數組。第一行里面數組有非常多的參數,都以',' 隔開。 所以我們再對數組進行遍歷,然后按照文件的具體規則來就行格式化即可。
貼上一個格式化完畢的截圖
就是這樣,主要講解一個csv文件格式化處理的思路。這里我并沒有仔細介紹csv庫。所以大家對這個庫如果不熟悉,可以查閱一下資料和文檔。 作為一個自帶的輕量級操作csv的庫我認為還是比較方便和好用的。處理更大型的csv文件我們還有pandas可以使用。到時候我碰到了再給大家介紹。
總結
以上是生活随笔為你收集整理的python中csv库_关于python 自带csv库的使用心得 附带操作实例以及excel下乱码的解决...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python t检验_讲讲统计学中T检验
- 下一篇: python文本分类_教你用python