用讀寫操作複製檔案
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檔案的讀![](https://pic.w3help.cc/ffb/7a3a6ffc0b0187fdc260d3595d21e.jpeg)
在上面,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...