python文件處理

1、文件的打開方式python

  文件打開方法: open(name[,mode][,buf][,encoding])linux

  參數解釋:name 文件路徑緩存

       mode 打開方式函數

       buf:緩衝buffering大小編碼

       encoding: 文件的編碼格式spa

  文件打開方式:指針

  

 

2、文件的讀取code

  read():讀取整個文件對象

  read(size):讀取size個字節blog

  readline([size]):讀取一行

  readlines([size]):讀取buffering個字節,返回每一行所組成的列表

  iter():使用迭代器讀取文件

 

給出一個文本文件:E://ME.txt,內容以下:

                                說給本身聽
                                ---三毛
若是有來生,
要作一棵樹,
站成永恆,
沒有悲歡的姿式,
一半在土裏安詳,
一半在風裏張揚,
一半灑落陰涼,
一半沐浴陽光,
很是沉默很是驕傲,
從不依靠,從不尋找。
#使用read()方法
f=open("E://ME.txt","r",encoding="utf-8"); data=f.read(); print(data);

執行結果以下:
                                說給本身聽
                                ---三毛
若是有來生,
要作一棵樹,
站成永恆,
沒有悲歡的姿式,
一半在土裏安詳,
一半在風裏張揚,
一半灑落陰涼,
一半沐浴陽光,
很是沉默很是驕傲,
從不依靠,從不尋找。

#使用read(size)方法
f=open("E://ME.txt","r",encoding="utf-8");
data=f.read(30);
print(data);

執行結果以下:

                                說給本身聽
                                ---三毛

 

#使用readline()方法

f=open("E://ME.txt","r",encoding="utf-8");
data=f.readline();
print(data);

 

執行結果以下:

                                說給本身聽

 

#使用readline(30)方法:

f=open("E://ME.txt","r",encoding="utf-8");
data=f.readline(10);
data1=f.readline(10);
print(data);
print(data1);

 

執行結果以下:

                                說
給本身聽

#使用readlines()方法

f=open("E://ME.txt","r",encoding="utf-8");
data=f.readlines();
print(data);

執行結果以下:

['\ufeff\t\t\t\t\t\t\t\t說給本身聽\n', '\t\t\t\t\t\t\t\t---三毛\n', '若是有來生,\n', '要作一棵樹,\n', '站成永恆,\n', '沒有悲歡的姿式,\n', '一半在土裏安詳,\n', '一半在風裏張揚,\n', '一半灑落陰涼,\n', '一半沐浴陽光,\n', '很是沉默很是驕傲,\n', '從不依靠,從不尋找。']

 

#使用readlines(size)方法

f=open("E://ME.txt","r",encoding="utf-8");
data=f.readlines(1);
data1=f.readline(2);
data2=f.readlines(3);
print(data);
print(data1);
print(data2);

執行結果以下:

['\ufeff\t\t\t\t\t\t\t\t說給本身聽\n']
        
['\t\t\t\t\t\t---三毛\n']

 

 

發現readlines(size)這個方法的運行結果和咱們的預期不太同樣。

這是因爲存在IO緩衝區,緩衝區的大小爲:8192.

 

 

#使用迭代器讀取文件

f=open("E://ME.txt","r",encoding="utf-8");
iter_f=iter(f);#把文件對象轉爲迭代器對象
for i in iter_f:
    print(i,end="");

執行結果爲:

                                說給本身聽
                                ---三毛
若是有來生,
要作一棵樹,
站成永恆,
沒有悲歡的姿式,
一半在土裏安詳,
一半在風裏張揚,
一半灑落陰涼,
一半沐浴陽光,
很是沉默很是驕傲,
從不依靠,從不尋找。

 

 

使用read()/readline()/readlines()會把文件整個加載到內存中去,極大的浪費內存,咱們採用迭代器的方式能夠節約內存。

 

 

3、文件寫入

write(str):將字符串寫入文件

writelines(strings):將多行寫到文件

 

#使用write()方法
f=open("E://ME.txt","a+",encoding="utf-8"); data="\n\n夢想,能夠天花亂墜"; f.write(data);

此時,其實只是對內存中的數據進行了修改,磁盤中的數據並無被修改。只有調動flush()/close()方法,修改後的數據纔會寫入磁盤。

使用writelines()方法;
f=open("E://ME.txt","a+",encoding="utf-8");

data1=[
    "心,若沒有棲息的地方,到哪裏都是流浪",
    "飛蛾撲火時,必是極快樂幸福的",
    "今日的事情,盡心、盡意、盡力去作了,不管成績如何,都應該高高興興地在牀上恬睡。"
]
f.writelines(data1);
f.close()

此時,其實只是對內存中的數據進行了修改,磁盤中的數據並無被修改。只有調動flush()/close()方法,修改後的數據纔會寫入磁盤。

 

python寫磁盤時機
1.主動調用close()/flush()方法,寫緩存同步到磁盤
2。寫入數據量大於等於寫緩存,寫緩存同步到磁盤

 

4、文件指針

文件指針操做:

    seek(offset,[whence])

    offset:偏移量,能夠爲負數

    whence:偏移至關位置,其取值有如下三個:

        一、os.SEEK_SET:相對文件起始位置

        二、os.SEEK_CUR:相對文件當前位置

        三、os.SEEK_END:相對文件結束位置

 

    tell():tell函數的做用是顯示當前指針位置

      

import os;
f=open("E://ME.txt","r+",encoding="utf-8");
f.read(3);
print(f.tell());
f.seek(0,os.SEEK_SET)
print(f.tell());

執行結果爲:
5
3

使用seek()函數,咱們能夠定義到文件的任意一個位置。

 

5、文件關閉

爲何要關閉文件?

1.將寫緩存同步到磁盤

二、linux系統中,每一個進程打開文件的個數是有限制的,若是超過了系統限制,再打開文件就會失敗。

關閉文件,其實就是調用close()函數。

相關文章
相關標籤/搜索