用讀寫操作複製檔案,csv ,序列化和反序列化

2021-09-26 01:49:58 字數 4576 閱讀 7399

用讀寫操作複製檔案

r :只能讀

w; 只能寫 覆蓋整個檔案 不存在則建立

a 只能寫 從檔案底部新增內容 不存在則建立

「rb」 : 以二進位制讀方式開啟,只能讀檔案 , 如果檔案不存 在,會發生異常

「wb」: 以二進位制寫方式開啟,只能寫檔案, 如果檔案不存 在,建立該檔案;如果檔案已存在,先清空,再開啟檔案

file_path = r'c:\users\running\desktop\gpday14(模組與檔案)\\open.png'

with open(file_path, 'rb') as rstream:

content = rstream.read()

# 寫入

filename = file_path[file_path.rfind('\\') + 1:]

with open(filename, 'wb') as wstream:

wstream.write(content)

print('複製完成!')

1、csv的寫呼叫writer物件的前提是:需要傳入乙個檔案物件,然後才能在這個檔案物件的基礎上呼叫csv的寫入方法writerow(寫入一行)writerrow(寫入多行)。寫入資料的**如下:

import csv

headers = ['class','name','***','height','year']

rows = [

[1,'xiaoming','male',168,23],

[1,'xiaohon

g','female',162,22],

[2,'xiaozhang','female',163,21],

[2,'xiaoli','male',158,21]

]with open('test.csv','w')as f:

f_csv = csv.writer(f)

f_csv.writerow(headers)

f_csv.writerows(rows)

注意:如果開啟csv檔案出現空行的情況,那麼需要新增乙個引數 newline=」(我使用windows出現了這種情況,使用linux mint沒有出現)

with open('test.csv','w',newline='')as f:
2、寫入字典序列的資料在寫入字典序列型別資料的時候,需要傳入兩個引數,乙個是檔案物件——f,乙個是欄位名稱——fieldnames,到時候要寫入表頭的時候,只需要呼叫writerheader方法,寫入一行字典系列資料呼叫writerrow方法,並傳入相應字典引數,寫入多行呼叫writerows

具體**如下:

import csv

headers = ['class','name','***','height','year']

rows = [,,

,,]with open('test2.csv','w',newline='')as f:

f_csv = csv.dictwriter(f,headers)

f_csv.writeheader()

f_csv.writerows(rows)

3、csv檔案的讀

在上面,row是乙個列表,如果想要檢視固定的某列,則需要加上下標,例如我想要檢視name,那麼只需要改為row[1]

序列化和反序列化什麼是序列化與反序列化?

將物件轉換為可通過網路傳輸或可以儲存到本地磁碟的資料格式(如:xml、json或特定格式的位元組串)的過程稱為序列化;

反之,則稱為反序列化。

json:返回的是字串

import json

dict1 = ,,],

'beike': [,,

]}result = json.dumps(dict1)

print(result)

print(type(result))

#反序列化

r = json.loads(result)

print(r)

students = r.get('tianfengli')

for student in students:

if 'xiaohua1' == student.get('sname'):

print('找到了')

break

else:

print('沒有此學生!')

序列化: dumps

反序列化: loads

with open('students.txt','w') as wstream:

json.dump(dict1,wstream)

print('儲存成功')

with open('students.txt','r') as rstream:

content = json.load(rstream)

print(content)

students = content.get('beike')

print(students)

pickle:返回的是位元組串

dict1 = ,,],

'beike': [,,

]}

可以放乙個自定義的dict1,也可以放乙個物件(stu)

import pickle

result = pickle.dumps(dict1)

print(result)

r = pickle.loads(result)

print(r)

也可以放乙個物件(stu)

class student:

def __init__(self, name, age):

self.name = name

self.age = age

def __str__(self):

return self.name

stu = student('xiaohua', 20)

stu1 = student('ergou', 19)

bobj = pickle.dumps(stu)

print(bobj)

stu = pickle.loads(bobj)

print(stu)

關於dump和load

可以把物件寫入檔案裡

with open('stus.txt', 'wb') as ws:

pickle.dump(stu, ws)

pickle.dump(stu1, ws)

with open('stus.txt', 'rb') as rs:

while true:

try:

content = pickle.load(rs)

print(content)

except:

print('讀取完畢!')

break

json 模組提供了一種很簡單的方式來編碼和解碼json資料。 其中兩個主要的函式是 json.dumps() 和 json.loads() , 要比其他序列化函式庫如pickle的介面少得多。 下面演示如何將乙個python資料結構轉換為json:

import json

data =

json_str = json.dumps(data)

下面演示如何將乙個json編碼的字串轉換回乙個python資料結構:

data = json.loads(json_str)

如果你要處理的是檔案而不是字串,你可以使用 json.dump() 和 json.load() 來編碼和解碼json資料。例如:

# writing json data

with open('data.json', 'w') as f:

json.dump(data, f)

# reading data back

with open('data.json', 'r') as f:

data = json.load(f)

Python 檔案讀寫 序列化 反序列化和JSON

讀檔案 f open users michael test.txt r 開啟檔案 f.read 讀檔案 f.close 關閉檔案 由於檔案讀寫時都有可能產生ioerror,一旦出錯,後面的f.close 就不會呼叫。所以,為了保證無論是否出錯都能正確地關閉檔案,我們可以使用try finally來實...

C xml檔案操作 序列化

給乙個c 程式新增乙個xml檔案,右擊專案新增,選擇xml檔案 這樣建立的xml檔案不能建立到debug資料夾下面 需要在xml屬性中設定 複製到輸出目錄 始終複製 xml 內容所有的關鍵字根據要求來設定,在獲取的時必須與建立時一致 xml version 1.0 encoding utf 8 張大...

淺複製 深複製 序列化

值型別的複製沒有淺複製或深複製之說。淺 深 複製針對的是引用型別。比如陣列array的clone 就是淺複製,對於值型別陣列,轉殖方法會產生兩個獨立的陣列,轉殖引用型別陣列會產生指向相同物件的兩個陣列。舉例,陣列的clone 方法,返回object型別的引用,它必須被強制轉換成陣列型別。static...