1. 程式人生 > >使用python讀取csv檔案

使用python讀取csv檔案

檔案的讀取

1.首先你得有一個csv檔案,可以把excel檔案另存為csv檔案也可以~
我這裡命名為delivery.csv 裡面的數字格式如下:
圖1

2.接下來就是利用csv模組的相關函式進行開啟檔案 讀取裡面的資料,存成一個二維的矩陣,都是一些基本操作,程式碼如下:

import csv 

csv_file=csv.reader(open('delivery.csv','r'))
print(csv_file) #可以先輸出看一下該檔案是什麼樣的型別

輸出結果如下:

<_csv.reader object at 0x000000000CE4B250>

輸出的只是一個檔案物件,並不是我們需要列印的數字型別的~,所以我們需要遍歷這個檔案,可以輸出該檔案每一行的資訊,也可以直接輸出全部資訊:

import csv 

csv_file=csv.reader(open('delivery.csv','r'))
print(csv_file) #可以先輸出看一下該檔案是什麼樣的型別

content=[] #用來儲存整個檔案的資料,存成一個列表,列表的每一個元素又是一個列表,表示的是檔案的某一行

for line in csv_file:
    print(line) #列印檔案每一行的資訊
    content.append(line)
print("該檔案中儲存的資料為:\n",content)

輸出的結果為:
圖2

檔案的寫入:

把自己要寫入的資料存入csv檔案中,操作如下:
首先要定義要寫入的檔案變數 csv_file ,接下來我們需要對要寫入的檔案開啟(使用追加的方式‘a’)然後open函式還需要引數newline=’ ’ 如果不用newline=‘ ’就寫不進去,,具體原因不清楚,,
然後csv.writer的另一個引數,dialect,也就是指定我們寫入檔案的方式,這裡指定為‘excel’方式

import csv
csv_file=csv.writer(open('delivery4.csv','a',newline=''),dialect='excel')
print(csv_file)

我們可以先列印csv_file 看一下該變數是什麼型別的:
圖3

接下來我們就可以對新建的檔案delivery4.csv檔案進行寫入操作啦:

import csv
csv_file=csv.writer(open('delivery4.csv','a',newline=''),dialect='excel')
print(csv_file)

item1=['璇璇',22,'可愛小仙女優秀'
] item2=['僩僩',26,'麼麼噠~'] csv_file.writerow(item1) csv_file.writerow(item2)

執行結果如下:(之所以會重複,是因為我運行了兩次)
圖4

寫入檔案之後,除了在剛才寫入的檔案delivery4.csv中檢視寫入的內容以外,我們還可以在python中直接讀取剛才寫入的內容,也就是上面的檔案讀取:
圖5

發現重複執行的話就是會重複寫入~

上面對於檔案的讀取操作是很簡單,可是發現數據都被讀成字串形式,有時候我們可能並不希望結果是這樣的,因為我們可能需要這些數值型的資料進行矩陣運算等,所以這種字串的形式就不適用啦,接下來我介紹另一種很簡便的針對數值型資料的讀取(讀取的結果仍然是數值型的資料)

# -*- coding: utf-8 -*-
"""
Created on Sat Jun 23 13:14:40 2018

@author: Administrator
"""

import csv
from numpy import genfromtxt
import numpy as np
csv_file=csv.writer(open('delivery5.csv','a',newline=''),dialect='excel')
print(csv_file)
item1=[1,2,3,4]
item2=[2,3,4,5]
item3=[3,4,5,6]
csv_file.writerow(item1)
csv_file.writerow(item2)
csv_file.writerow(item3)

dataPath=r'F:\workspace_python\py_mechinelearning\20180623\delivery5.csv'
data=genfromtxt(dataPath,delimiter=',')
print(data)

最終寫入到delivery5.csv檔案中的資料為:
圖6

然後在程式中執行的結果為:
圖7

我覺得這種檔案讀取的方式以後應該會經常用到~~~