Python中csv模塊的用法

1. 寫入並生成csv文件

代碼:

# coding: utf-8

import csv

csvfile = file('csv_test.csv', 'wb')
writer = csv.writer(csvfile)
writer.writerow(['姓名', '年齡', '電話'])

data = [
    ('小河', '25', '1234567'),
    ('小芳', '18', '789456')
]
writer.writerows(data)

csvfile.close()

wb中的w表示寫入模式,b是文件模式
寫入一行用writerow
多行用writerows

2. 讀取csv文件

代碼:

# coding: utf-8

import csv

csvfile = file('csv_test.csv', 'rb')
reader = csv.reader(csvfile)

for line in reader:
    print line

csvfile.close() 

運行結果:
root@he-desktop:~/python/example# python read_csv.py
[‘\xe5\xa7\x93\xe5\x90\x8d’, ‘\xe5\xb9\xb4\xe9\xbe\x84’, ‘\xe7\x94\xb5\xe8\xaf\x9d’]
[‘\xe5\xb0\x8f\xe6\xb2\xb3’, ‘25’, ‘1234567’]
[‘\xe5\xb0\x8f\xe8\x8a\xb3’, ‘18’, ‘789456’]

3.完整的例子

import csv


# dialect是訪問csv文件時需要指定的參數之一,用來確定csv文件的數據格式
# 下面這個函數列舉系統支持的dialect有哪些,默認值是'excel',用戶也可
# 以從Dialect派生一個類,使用該類的實例作爲dialect參數。
print csv.list_dialects()


def test_writer():
  # csv文件必須以二進制方式open
  with open('eggs.csv', 'wb') as csvfile:
    spamwriter = csv.writer(csvfile)
    spamwriter.writerow(['Spam'] * 5 + ['Baked Beans'])
    spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])


def test_reader():
  with open('eggs.csv', 'rb') as csvfile:
    spamreader = csv.reader(csvfile)
    for row in spamreader:
      print row


# sniffer 用來推斷csv文件的格式,不是很準確
def test_sniffer():
  with open('eggs.csv', 'wb') as csvfile:
    spamwriter = csv.writer(csvfile, delimiter=' ')

    spamwriter.writerow(['Spam'] * 2 + ['Baked Beans'])
    spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])

  # 通常你需要指定與寫入者相同的文件格式才能正確的讀取數據
  with open('eggs.csv', 'rb') as csvfile:
    spamreader = csv.reader(csvfile, delimiter=' ')
    for row in spamreader:
      print ', '.join(row)

  # 如果不知道文件格式,sniffer就可以派上用場了
  with open('eggs.csv', 'rb') as csvfile:
    # 用sniffer推斷文件格式,從而得到dialect
    dialect = csv.Sniffer().sniff(csvfile.read(1024))
    print dialect.delimiter, dialect.quotechar

    # 文件重新移動到頭部
    csvfile.seek(0)

    # 用推斷出來的dialect創建reader
    reader = csv.reader(csvfile, dialect)

    for row in reader:
      print ', '.join(row)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章