1. 程式人生 > >Python(檔案讀取、序列化反序列化)

Python(檔案讀取、序列化反序列化)

借鑑菜鳥教程

一、讀取

open() 將會返回一個 file 物件,基本語法格式如下:

open(filename, mode)(filename, mode)
  • filename:包含了你要訪問的檔名稱的字串值。
  • mode:決定了開啟檔案的模式:只讀,寫入,追加等。所有可取值見如下的完全列表。這個引數是非強制的,預設檔案訪問模式為只讀(r)。

不同模式開啟檔案的完全列表:

模式 描述
r 以只讀方式開啟檔案。檔案的指標將會放在檔案的開頭。這是預設模式。
rb 以二進位制格式開啟一個檔案用於只讀。檔案指標將會放在檔案的開頭。
r+ 開啟一個檔案用於讀寫。檔案指標將會放在檔案的開頭。
rb+ 以二進位制格式開啟一個檔案用於讀寫。檔案指標將會放在檔案的開頭。
w 開啟一個檔案只用於寫入。如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。如果該檔案不存在,建立新檔案。
wb 以二進位制格式開啟一個檔案只用於寫入。如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。如果該檔案不存在,建立新檔案。
w+ 開啟一個檔案用於讀寫。如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。如果該檔案不存在,建立新檔案。
wb+ 以二進位制格式開啟一個檔案用於讀寫。如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。如果該檔案不存在,建立新檔案。
a 開啟一個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入。
ab 以二進位制格式開啟一個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入。
a+ 開啟一個檔案用於讀寫。如果該檔案已存在,檔案指標將會放在檔案的結尾。檔案開啟時會是追加模式。如果該檔案不存在,建立新檔案用於讀寫。
ab+ 以二進位制格式開啟一個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。如果該檔案不存在,建立新檔案用於讀寫。

  r+與w+的區別:

    r+:如果讀寫的檔案存在。會在後面追加,不存在系統會報錯。

    w+:讀寫的檔案不存在會建立新的檔案,如果存在會直接覆蓋原檔案。

二、方法    

        f.read()

          為了讀取一個檔案的內容,呼叫 f.read(size), 這將讀取一定數目的資料, 然後作為字串或位元組物件返回。

                size 是一個可選的數字型別的引數。 當 size 被忽略了或者為負, 那麼該檔案的所有內容都將被讀取並且返回。

                readline(),readlines() 

        f.write()

                f.write(string) 將 string 寫入到檔案中, 然後返回寫入的字元數。

         f.tell()

            f.tell() 返回檔案物件當前所處的位置, 它是從檔案開頭開始算起的位元組數。

        f.seek()

        如果要改變檔案當前的位置, 可以使用 f.seek(offset, from_what) 函式。

        from_what 的值, 如果是 0 表示開頭, 如果是 1 表示當前位置, 2 表示檔案的結尾,例如:

  • seek(x,0) : 從起始位置即檔案首行首字元開始移動 x 個字元
  • seek(x,1) : 表示從當前位置往後移動x個字元
  • seek(-x,2):表示從檔案的結尾往前移動x個字元    

    f.close()

    在文字檔案中 (那些開啟檔案的模式下沒有 b 的), 只會相對於檔案起始位置進行定位。

    當你處理完一個檔案後, 呼叫 f.close() 來關閉檔案並釋放系統的資源,如果嘗試再呼叫該檔案,則會丟擲異常。

with open('too.txt','r') as f:
    print(f.readlines(4))
from urllib import request
request=request.urlopen('http://www.baidu.com/')
f=open('baidu.txt','w')
page=f.write(str(request.read()))
f.close()

二、序列化、反序列化

        python的pickle模組實現了基本的資料序列和反序列化。

        通過pickle模組的序列化操作我們能夠將程式中執行的物件資訊儲存到檔案中去,永久儲存。

        通過pickle模組的反序列化操作,我們能夠從檔案中建立上一次程式儲存的物件。

基本介面:        

pickle.dump(obj, file,[,protocol]).dump(obj, file,[,protocol])
import pickle
dic={'a':[1,2,3],'b':(3,5,7)}
f=open('xi.pkl','wb')
pickle.dump(dic,f)
f.close()
p=open('xi.txt','rb')
di=pickle.load(p)
print(di)

相關推薦

Python(檔案讀取序列序列)

借鑑菜鳥教程 一、讀取 open() 將會返回一個 file 物件,基本語法格式如下: open(filename, mode)(filename, mode) filename:包含了你要訪問的檔名稱的字串值。 mode:決定了開啟檔案的模式:只讀,寫入,追加

python檔案處理路徑處理序列序列

檔案IO常用操作 一般說IO操作,指的是檔案IO,如果指的是網路IO,會直接說。 把檔案儲存到磁碟上的這個過程,叫做落地。 column column open 開啟

.NET Core protobuf-netMessagePackJson.NET序列/序列性能測試

img alt int 序列化 james 最優 5.1 out mar 測試代碼Zonciu/SerializationTest.cs, 源自neuecc/ZeroFormatterBenchmark.cs。 NuGet包及其版本 mgravell/protobuf-ne

文件操作,路徑操作,StringIO和BytesIO,序列序列,正則表達式與python中使用

基於 關系 判斷目錄 java、 優先 errors 情況下 water des 文件操作 打開操作open(file, mode=‘r‘, buffering=-1, encoding=None, errors=None, newline=None, closefd=Tr

Python json序列 序列,map,reduce,filter

import json # 序列化 反序列化 print(dir(json)) d1=dict(name='小米',age=2,score=99) print(d1) strs=json.dumps(d1) print(strs) d2=json.loads(strs) print(d2)

0016-Avro序列&序列和Spark讀取Avro數據

ron ace raft 轉換 import 系統 提示 文章 offset 溫馨提示:要看高清無碼套圖,請使用手機打開並單擊圖片放大查看。 1.簡介 本篇文章主要講如何使用java生成Avro格式數據以及如何通過spark將Avro數據文件轉換成DataSet和Data

hive的三板斧:內部表和外部表分割槽和分桶以及序列/序列(SerDe)

hive的三板斧:內部表和外部表、分割槽和分桶以及序列化/反序列化(SerDe)   Hive是Hadoop生態圈中實現資料倉庫的一項技術。雖然Hadoop和HDFS的設計侷限了Hive所能勝任的工作,但是Hive仍然是目前網際網路中最適合資料倉庫的應用技術。 不論從“品相還是舉止

21.Java語言緩衝流轉換流序列序列更改列印流

緩衝流 緩衝流的基本原理,是在建立流物件時,會建立一個內建的預設大小的(8k)緩衝區陣列,通過緩衝區讀寫,減少系統IO次數,從而提高讀寫的效率。 1.位元組緩衝流:        1).輸出流:OutputStream               |--FileOut

python: 序列/序列及物件的深拷貝/淺拷貝

一、序列化/反序列化 python中內建了很多序列化/反序列化的方式,最常用的有json、pickle、marshal這三種,示例用法如下: import json import pickle import marshal author1 = {"name": "菩提樹下的楊過", "blo

go-gob序列/序列與讀寫檔案效能對比測試

測試目的:個人開源專案ZCache需對資料進行持久化儲存,在此驗證兩種技術方案:gob序列化/反序列化和直接讀寫檔案的效能 待測試程式碼 package main import ( gob "encoding/gob" "encoding/json" "fmt" "

LeetCode 297 Hard 序列/序列 二叉樹 Python

class Codec: """ Solution Method 參考答案給的解法是將二叉樹DFS序列化,然後對其反序列化 這裡我最關鍵的是每想到這樣去反序列化,因為python傳參是引用傳參,通過這種先左後右雖然傳 的都是同一個data,但是其實在左

python 之pickle模組--輸出儲存到文字(基本的資料序列序列

字典輸出到文字該如何輸出呢?遍歷字典,輸出也麻煩了,而且字典沒有按順序儲存,讀起來也麻煩。這個需求,導致的結果就是發現了這個好用的模組。 下面是一個字典的例項: #!/usr/bin/env python #-*- coding: utf-8 -*- #filename:

C# 利用函式反射XML序列/序列儲存函式執行與輸入引數列表

最近在寫工業機械臂控制的程式碼,需要實現如下的一個功能: 將機械臂需要執行的函式與輸入引數按照順序儲存成檔案,載入檔案後能夠直接命令機械手進行動作。 介面使用winform進行開發。函式名與引數的儲存、載入的部分,考慮到日後函式的增刪,使用了函式反射+XML

SparkStreaming讀取kafka資料進行序列以及mapPartition優化例項

val monitorWrappedMessage1 =  KafkaUtils.createStream[String,  Array[Byte], StringDecoder, DefaultDecoder](       ssc, kafkaParams, topic

python json 序列序列 和 中文編碼問題

json的dumps方法和loads方法,可實現資料的序列化和反序列化。具體來說,dumps方法,可將json格式資料序列為python的相關的資料型別,通常用於列印等;loads方法則是相反,把python資料型別轉換為json相應的資料型別格式要求,反序列化後可以對js

用C++優雅的實現物件到檔案序列/序列

需求 .  在寫程式碼的過程中,經常會需要把程式碼層面的物件資料儲存到檔案,而這些資料會以各種格式儲存.例如:json,xml,二進位制等等.最近恰好就需要把物件以二進位制儲存到硬碟.這是一個很簡單的需求,相比json,xml格式,二進位制是直接把位元組copy到硬碟,沒有中間商賺差價,所以這實現起來相對容易

Unity 基於excel2json批處理讀取Excel表並序列

excel2json是一款將Excel表格檔案快速生成json和C#資料類的高效外掛,詳情瞭解如下: https://neil3d.github.io/coding/excel2json.html 該外掛有兩種模式,分別是命令列和影象介面;當然了,為了更方便愉快的進行大規模轉換,可以寫兩個批處理檔案來執行:

MessagePack 新型序列序列方案

only program next sel ges new sys adf 簡介 進入在學習redis的時候,在文中看到了關於MessagePack的簡介,發現非常有意思,於是就花了點時間大致了解了下。 MessagePack介紹: MessagePack is an ef

10.8-全棧Java筆記:序列/序列的步驟和實例

java 本節我們詳細講解10.3節中提到的序列化和反序列化操作。序列化和反序列化是什麽當兩個進程遠程通信時,彼此可以發送各種類型的數據。 無論是何種類型的數據,都會以二進制序列的形式在網絡上傳送。比如,我們可以通過http協議發送字符串信息;我們也可以在網絡上直接發送JAVA對象。發送方需要把這個Java對

測試了下boost的序列序列功能

con != bar lan class try hat out ora [cpp] view plain copy // testSerialization.cpp : Defines the entry point for the console