1. 程式人生 > >python中的檔案讀寫

python中的檔案讀寫

雖然研究了很多python程式碼,卻沒有整理過關於檔案操作的,系統地整理下。

一、普通的檔案讀寫

在磁碟上讀寫檔案都是由作業系統控制的,應用讀寫檔案就是請求作業系統開啟一個檔案物件,然後,通過作業系統提供的介面從這個檔案物件中讀取資料(讀檔案),或者把資料寫入這個檔案物件(寫檔案)。

python內建了各種函式,來對檔案進行操作。
1、開啟檔案:open

 f = open('data/test.txt', 'r')

2、讀取檔案內容:read()

str=f.read()#返回一個str物件
for line in f.readlines():
    print(line.strip())
# 把末尾的'\n'刪掉

因為呼叫read()會一次性讀取檔案的全部內容,如果檔案特別大,會記憶體溢位,所以,可以反覆呼叫read(size)方法,每次最多讀取size個位元組的內容。另外,呼叫readline()可以每次讀取一行內容,呼叫readlines()一次讀取所有內容並按行返回list。根據不同情況決定呼叫哪種方法。

3、讀取二進位制檔案

f = open('img/test.jpg', 'rb')
f.read()

4、字元編碼
要讀取非ASCII編碼的文字檔案,就必須以二進位制模式開啟,再解碼。比如GBK編碼的檔案:

f = open('/Users/michael/gbk.txt'
, 'rb') u = f.read().decode('gbk')

如果每次都這麼手動轉換編碼嫌麻煩(寫程式怕麻煩是好事,不怕麻煩就會寫出又長又難懂又沒法維護的程式碼),Python還提供了一個codecs模組幫我們在讀檔案時自動轉換編碼,直接讀出unicode:

import codecs
with codecs.open('data/gbk.txt', 'r', 'gbk') as f:
    f.read() 

5、關閉檔案

f.close()

Python引入了with語句來自動幫我們呼叫close()方法,這樣我們就不用手工呼叫close方法了:

with open('data/test.txt'
, 'r') as f: print f.read()

6、寫檔案

with open('data/test.txt', 'w') as f:
    f.write('Hello, world!')

注意,當我們寫檔案時,作業系統往往不會立刻把資料寫入磁碟,而是放到記憶體快取起來,空閒的時候再慢慢寫入。只有呼叫close()方法時,作業系統才保證把沒有寫入的資料全部寫入磁碟。所以如果不用with語句的話千萬不要忘記呼叫close()。

二、Python讀取CSV檔案的三種方式

1、普通方法讀取:

 with open("fileName.csv",encoding='utf-8') as file:
     for line in  file:
         print line

2、用CSV標準庫讀取:

import csv
csv_reader = csv.reader(open("fileName.csv"))
for row in csv_reader:
   print row

3、用pandas讀取:

import pandas as pd
data = pd.read_csv("fileName.csv")
print data

4、DataFrame寫入csv檔案

df.to_csv('Result.csv')