日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python 文档操作_Python 文件操作

發(fā)布時(shí)間:2025/3/11 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 文档操作_Python 文件操作 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一. Python 讀寫 創(chuàng)建文件

Python中對(duì)文件,文件夾(文件操作函數(shù))的操作需要涉及到OS 模塊和 shutil 模塊 .

一) . OS模塊 的基本操作

方法

功能

os.getcwd()

得到當(dāng)前工作目錄,及當(dāng)前Python腳本工作的目錄路徑

os.listdir()

返回指定目錄下的所有文件和目錄名:

os.remoce()

函數(shù)用來刪除一個(gè)文件

os.removedirs(r"C:\python")

刪除多個(gè)目錄

os.path.isfile()

驗(yàn)證給出的路徑是否是一個(gè)文件

os.patn.isdir()

驗(yàn)證給出的路徑是否是一個(gè)目錄

os,path.isabs()

判斷是否是絕對(duì)路徑

os.path.exists()

檢驗(yàn)給出的路徑是否真的存在

os.path.split()

返回一個(gè)路徑的目錄名和文件名

os.path.splitext()

分離擴(kuò)展名

os.path.dirname()

獲取路徑名

os.path.basename()

獲取文件名

os.system()

運(yùn)行shell命令

os.getenv()與os.putenv()

讀取和設(shè)置環(huán)境變量

os.linesep

給出當(dāng)前平臺(tái)使用的行終止符 Windows使用’\r\n’,Linux使用’\n’而Mac使用’\r’

os.name

指示你正在使用的平臺(tái) 對(duì)于Windows,它是’nt’,而對(duì)于Linux/Unix用戶,它是’posix’

os,rename(old,new)

重命名

os.mekedirs(r“c:\python\test”)

創(chuàng)建多級(jí)目錄

os.makedir()

創(chuàng)建單個(gè)目錄

os.stat(file)

獲取文件屬性

os.chmod(file)

修改文件權(quán)限與時(shí)間戳

os.exit()

終止當(dāng)前進(jìn)程

os.path.getsize(filename)

獲取文件大小

os.mknod("test.txt")

創(chuàng)建空文件

fp=open("test.txt,w")

直接打開一個(gè)文件,如果不存在則創(chuàng)建文件

二) shutil模塊的基本操作

1 .簡(jiǎn)介:

shutil : 高級(jí)的 文件、文件夾、壓縮包處理模塊

2 . 使用

1) shutil.copyfileobj(文件1,文件2) :將文件1的數(shù)據(jù)復(fù)制copy給文件2.

import shutil

f1 = open("1.txt",encoding="utf-8")

f2 = open("2.txt",encoding="utf-8")

shutil.copyfileobj(f1,f2)

2) shutil.copyfile(文件1,文件2) : 不用打開文件名進(jìn)行覆蓋copy.

import shutil

shutil.copyfile("1.txt","3.txt")

2) shutil.copymode(src,dst) (前提是dst文件存在,不然報(bào)錯(cuò))僅拷貝權(quán)限.內(nèi)容,組,用戶均不變

import os

import shutil

stat1 = os.stat('2.txt')

print('2.txt的屬性:',stat1)

print('2.txt的mode屬性:',stat1.st_mode)

stat2 = os.stat('520.py')

print('520.py的屬性:',stat2)

print('520.py的mode屬性:',stat2.st_mode)

shutil.copymode('2.txt','520.py')

stat3 = os.stat('520.py')

print('shutil.copymode("2.txt","520.py")后520.py的屬性:',stat3)

print('shutil.copymode("2.txt","520.py")后520.py的mode屬性:',stat3.st_mode)

======================

2.txt的屬性: os.stat_result(st_mode=33323, st_ino=949061, st_dev=2049, st_nlink=1, st_uid=1000, st_gid=1000, st_size=91, st_atime=1534563978, st_mtime=1534563620, st_ctime=1534568796)

2.txt的mode屬性: 33323

520.py的屬性: os.stat_result(st_mode=33204, st_ino=948799, st_dev=2049, st_nlink=1, st_uid=1000, st_gid=1000, st_size=46, st_atime=1534569597, st_mtime=1534569597, st_ctime=1534569597)

520.py的mode屬性: 33204

shutil.copymode("2.txt","520.py")后520.py的屬性: os.stat_result(st_mode=33323, st_ino=948799, st_dev=2049, st_nlink=1, st_uid=1000, st_gid=1000, st_size=46, st_atime=1534569597, st_mtime=1534569597, st_ctime=1534569647)

shutil.copymode("2.txt","520.py")后520.py的mode屬性: 33323

3) . shutil.copystat(src, dst) 僅拷貝狀態(tài)信息,即文件屬性,包括:mode bits, atime, mtime, flags

import os

import shutil

stat1 = os.stat('2.txt')

print('2.txt的屬性:',stat1)

print('2.txt的stat屬性:',stat1.st_mode,stat1.st_atime,stat1.st_mtime,stat1.n_fields)

stat2 = os.stat('521.py')

print('521.py.py的屬性:',stat2)

print('521.py.py的stat屬性:',stat2.st_mode,stat2.st_atime,stat2.st_mtime,stat2.n_fields)

shutil.copystat('2.txt','521.py')

stat3 = os.stat('521.py')

print('shutil.copystat("2.txt","521.py")后521.py的屬性:',stat3)

print('shutil.copystat("2.txt","521.py")后521.py的stat屬性:',stat3.st_mode,stat3.st_atime,stat3.st_mtime,stat3.n_fields)

================================

2.txt的屬性: os.stat_result(st_mode=33323, st_ino=949061, st_dev=2049, st_nlink=1, st_uid=1000, st_gid=1000, st_size=91, st_atime=1534563978, st_mtime=1534563620, st_ctime=1534568796)

2.txt的stat屬性: 33323 1534563978.802531 1534563620.6685243 19

521.py.py的屬性: os.stat_result(st_mode=33204, st_ino=949087, st_dev=2049, st_nlink=1, st_uid=1000, st_gid=1000, st_size=31, st_atime=1534572967, st_mtime=1534572967, st_ctime=1534572967)

521.py.py的stat屬性: 33204 1534572967.3448722 1534572967.3448722 19

shutil.copystat("2.txt","521.py")后521.py的屬性: os.stat_result(st_mode=33323, st_ino=949087, st_dev=2049, st_nlink=1, st_uid=1000, st_gid=1000, st_size=31, st_atime=1534563978, st_mtime=1534563620, st_ctime=1534572967)

shutil.copystat("2.txt","521.py")后521.py的stat屬性: 33323 1534563978.802531 1534563620.6685243 19

4) . shutil.copytree(src, dst, symlinks=False, ignore=None) 遞歸的去拷貝文件夾

shutil.ignore_patterns(patterns)(忽略哪個(gè)文件,有選擇性的拷貝)

shutil.copytree('folder1', 'folder2', ignore=shutil.ignore_patterns('*.pyc', 'tmp*'))

shutil.copytree('f1', 'f2', symlinks=True, ignore=shutil.ignore_patterns('*.pyc', 'tmp*'))

5). shutil.rmtree(path[, ignore_errors[, onerror]]) 遞歸的去刪除文件

shutil.rmtree('folder1')

6). shutil.move(src, dst) 遞歸的去移動(dòng)文件,它類似mv命令,其實(shí)就是重命名。

shutil.move('folder1', 'folder3')

7). shutil.make_archive(base_name, format,...)

創(chuàng)建壓縮包并返回文件路徑,例如:zip、tar

創(chuàng)建壓縮包并返回文件路徑,例如:zip、tar

base_name: 壓縮包的文件名,也可以是壓縮包的路徑。只是文件名時(shí),則保存至當(dāng)前目錄,否則保存至指定路徑, 如:www =>保存至當(dāng)前路徑 如:/Users/wupeiqi/www =>保存至/Users/wupeiqi/

format: 壓縮包種類,“zip”, “tar”, “bztar”,“gztar”

root_dir: 要壓縮的文件夾路徑(默認(rèn)當(dāng)前目錄)

owner: 用戶,默認(rèn)當(dāng)前用戶

group: 組,默認(rèn)當(dāng)前組

logger: 用于記錄日志,通常是logging.Logger對(duì)象

#將 /Users/wupeiqi/Downloads/test 下的文件打包放置當(dāng)前程序目錄

import shutil

ret = shutil.make_archive("wwwwwwwwww", 'gztar', root_dir='/Users/wupeiqi/Downloads/test')

#將 /Users/wupeiqi/Downloads/test 下的文件打包放置 /Users/wupeiqi/目錄

import shutil

ret = shutil.make_archive("/Users/wupeiqi/wwwwwwwwww", 'gztar', root_dir='/Users/wupeiqi/Downloads/test')

shutil 對(duì)壓縮包的處理是調(diào)用 ZipFile 和 TarFile 兩個(gè)模塊來進(jìn)行的,詳細(xì):

import zipfile

# 壓縮

z = zipfile.ZipFile('laxi.zip', 'w')

z.write('a.log')

z.write('data.data')

z.close()

# 解壓

z = zipfile.ZipFile('laxi.zip', 'r')

z.extractall()

z.close()

import tarfile

# 壓縮

tar = tarfile.open('your.tar','w')

tar.add('/Users/wupeiqi/PycharmProjects/bbs2.log', arcname='bbs2.log')

tar.add('/Users/wupeiqi/PycharmProjects/cmdb.log', arcname='cmdb.log')

tar.close()

# 解壓

tar = tarfile.open('your.tar','r')

tar.extractall() # 可設(shè)置解壓地址

tar.close()

OS模塊 shutil模塊 SyS模塊的區(qū)別

模塊

功能

OS模塊

主要是與操作系統(tǒng)的交互

shutil模塊

高級(jí)的文件,文件夾,壓縮包處理模塊,也是與系統(tǒng)的交互

SyS模塊

主要是與Python解釋器的交互

二. 文件的讀寫操作

一) 基本知識(shí)

打開文件的模式

打開文件的方式

r

以只讀的方式打開文件

r+

可讀寫,文件不存在時(shí)會(huì)報(bào)錯(cuò)

rb

只讀二進(jìn)制

r+b

可讀寫二進(jìn)制,文件不存在,回報(bào)io錯(cuò)誤

w

以只寫的方式打開

w+

讀寫的形式打開,將原有的內(nèi)容擦處

wb

只讀寫二進(jìn)制

w+b

只寫二進(jìn)制

a

寫在末端

a+

以附加的形式打開可讀寫的文件

ab

以只寫二進(jìn)制形式打開

a+b

以二進(jìn)制方式追加

二). 打開文件的方法

方法一

f = open(file,modle,encoding="utf-8")

content = f.read()

lines = file.readlines()

for line in lines:

print(line)

f.close()

精簡(jiǎn)方式

with open("test.txt","a",encoding="utf-8",error="ignore") as file:

file.read() # 可以添加每次讀取的字節(jié)數(shù)

file.weite()

# 不需要close,也不需要異常處理異常,自動(dòng)關(guān)閉

文件的其他操作

F.flush()

#把緩沖區(qū)的內(nèi)容寫入硬盤

F.fileno()

#返回一個(gè)長(zhǎng)整型的”文件標(biāo)簽“

F.isatty()

#文件是否是一個(gè)終端設(shè)備文件(unix系統(tǒng)中的)

F.tell()

#返回文件操作標(biāo)記的當(dāng)前位置,以文件的開頭為原點(diǎn)

F.next()

#返回下一行,并將文件操作標(biāo)記位移到下一行。把一個(gè)file用于for ... in file這樣的語句時(shí),就是調(diào)用next()函數(shù)來實(shí)現(xiàn)遍歷的。

F.seek(offset[,whence])

#將文件打操作標(biāo)記移到offset的位置。這個(gè)offset一般是相對(duì)于文件的開頭來計(jì)算的,一般為正數(shù)。但如果提供了whence參數(shù)就不一定了,whence可以為0表示從頭開始計(jì)算,1表示以當(dāng)前位置為原點(diǎn)計(jì)算。2表示以文件末尾為原點(diǎn)進(jìn)行計(jì)算。需要注意,如果文件以a或a+的模式打開,每次進(jìn)行寫操作時(shí),文件操作標(biāo)記會(huì)自動(dòng)返回到文件末尾。

F.truncate([size])

#把文件裁成規(guī)定的大小,默認(rèn)的是裁到當(dāng)前文件操作標(biāo)記的位置。如果size比文件的大小還要大,依據(jù)系統(tǒng)的不同可能是不改變文件,也可能是用0把文件補(bǔ)到相應(yīng)的大小,也可能是以一些隨機(jī)的內(nèi)容加上去。

三). 讀寫 csv文件的操作

1. 讀操作

import csv

with open("test.csv","r",encoding="utf-8") as f:

reader =csv.reader(f,"excel",delimiter=";",quoting=csv.QUOTE_MINIMAL)

for row in reader:

print(row)

2. 寫操作

import csv

with open ("xxx.csv","a",newline=" ") as f:

writer = csv.write(f,delimiter=";",quotechar="|",quoting=csv.QUOTE_MINIMAL)

writer.writerow(["Tome"]*5+["End Tom"])

四). 讀寫字典的操作

1. 讀操作

import csv

with open("test.csv") as csvfile:

reader = csv.DictReader(csvfile)

for row in reader:

print(row["first_name"],row["last_name"])

2. 寫操作

import csv

with open("test.csv","w") as csvfile:

fieldnames = ["first_name","last_name"] # 寫入文件的列名

writer = csv.DictWriter(csvfile,fieldnames=fieldnames)

writer.writerheader()

writer.writerow({"first_name":"Backes","last_name":"Beans"})

demo

import csv

with open("test.csv","w") as csvfile:

writer = csv.writer(csvfile)

# 先寫入columns_name

writer.writerow(["index","a_name","b_name"])

# 寫入多行用writerows

# 可以加入一個(gè)for循環(huán)寫入

writer.writerows([0,1,3],[1,2,3],[2,3,4])

test

# 功能: 講一字典寫入到csv文件中

# 輸入: 文件名稱,數(shù)據(jù)字典

import csv

def createDictCSV(filename="",dataDict={}):

with open(fileName,"wb") as csvFile:

csvWriter = csv.writer(csvFile)

for k,v in dataDict.iteritens():

csvWriter.writerow([k,v])

csvFile.close()

三. json 解析

一) . JSON 簡(jiǎn)介

1. JSON (JavaScript Object Notation),是一種數(shù)據(jù)交互格式.

Json之前,大家都用 XML 傳遞數(shù)據(jù)。XML 是一種純文本格式,所以適合在網(wǎng)絡(luò)上交換數(shù)據(jù),但是 XML 格式比較復(fù)雜,終于道格拉斯·克羅克福特(Douglas Crockford)發(fā)明了JSON 這種超輕量級(jí)的數(shù)據(jù)交換格式。

2. JSON 如何使用

數(shù)據(jù)格式

JSON 實(shí)際上是 JavaScript的一個(gè)子集,所以JSON 的數(shù)據(jù)格式和JavaScript 是對(duì)應(yīng)的:

number => JS number

boolean => JS boolean

string => JS string //

null => JS null

array => JS Array 的表達(dá)方式 []

object => JS {} 表達(dá)式

3. 序列化與反序列化

1). JSON.stringify() # 將對(duì)象序列化為JSON字符串

JSON.stringify({},[]," ")

參數(shù)一: 要序列化的數(shù)據(jù)(object)

參數(shù)二:控制對(duì)象的鍵值,只想輸出制定的屬性, 傳入一個(gè)數(shù)組

參數(shù)三 : 序列化后,打印輸出的格式(一個(gè)Tab,可跟直觀的查看JSON)

2).JSON.parse() # 講JSON數(shù)據(jù)解析為JavaScript對(duì)象

JSON.parse(json.data) # 傳入json字符串

把 JavaScript 變成 Json ,就是把這個(gè)對(duì)象序列化為Json字符串,然后才可以通過網(wǎng)絡(luò)傳遞.

如果我們收到一個(gè)JSON格式的字符串,只需要把它反序列化成一個(gè)JavaScript對(duì)象,就可以在JavaScript中直接使用這個(gè)對(duì)象了。

二). JSON數(shù)據(jù)格式的形式

1. 數(shù)組形式[ ]

[

{

"id" : 1 ,

"naem" : "xiaoming" ,

},

{

"id" : 2,

"naem" : "tom" ,

}]

2. 對(duì)象形式

// 前后端分離,推薦后端返回給前端數(shù)據(jù)格式

{

"status" : 200 ,

"msg" : "success" ,

"data" : [

{

"id" : 1 ,

"naem" : "xiaoming" ,

},

{

"id" : 2,

"naem" : "tom" ,

}]

}

3. 數(shù)組對(duì)象混合

三). 讀寫JSON常用的函數(shù)

1. json.dumps()和json.loads() 是json格式處理函數(shù)

1). json.dumps()函數(shù)是將一個(gè)python數(shù)據(jù)類型列表進(jìn)行json格式的編碼,json.dumps()函數(shù)是將字典轉(zhuǎn)化為字符串

2). json.loads()函數(shù)是將json格式數(shù)據(jù)轉(zhuǎn)換過為字典,可以這么理解,json.loads()函數(shù)是將字符串轉(zhuǎn)化為字典,用字典的方法來取值.

2. 實(shí)例說明

1). json.dumps()

json.dumps()用于將dict類型的數(shù)據(jù)轉(zhuǎn)成str,因?yàn)槿绻苯訉ict類型的數(shù)據(jù)寫入json文件中會(huì)發(fā)生報(bào)錯(cuò),因此在將數(shù)據(jù)寫入時(shí)需要用到該函數(shù)。

import json

name_emb = {'a':'1111','b':'2222','c':'3333','d':'4444',}

jsObj = json.dumps(name_emb)

print(name_emb)

print(jsObj)

print(type(name_emb))

print(type(jsObj))

======================

{'a': '1111', 'c': '3333', 'b': '2222', 'd': '4444'}

{"a": "1111", "c": "3333", "b": "2222", "d": "4444"}

json.dump()用于將dict類型的數(shù)據(jù)轉(zhuǎn)成str,并寫入到j(luò)son文件中。下面兩種方法都可以將數(shù)據(jù)寫入json文件

import json

name_emb = {'a':'1111','b':'2222','c':'3333','d':'4444'}

emb_filename = ("emb_json.json")

# 方法一

jsObj = json.dumps(name_emb)

with open(emb_filename,"w") as f:

f.write(jsObj)

f.close()

# 方法 二

json.dump(name_emb,open(emb_filename,"w"))

2). json.loads()

json.loads()用于將str類型的數(shù)據(jù)轉(zhuǎn)成dict。

import json

name_emb = {'a':'1111','b':'2222','c':'3333','d':'4444',}

jsDumps = json.dumps(name_emb)

jsLoads = json.loads(jsDumps)

print(name_emb)

print(jsDumps)

print(jsLoads)

print(type(name_emb))

print(type(jsDumps))

print(type(jsLoads))

==========================

# 'a'變成了'a'是因?yàn)榘l(fā)生了類型轉(zhuǎn)換,str會(huì)轉(zhuǎn)換成unicode

{'a': '1111', 'b': '2222', 'c': '3333', 'd': '4444'}

{"a": "1111", "b": "2222", "c": "3333", "d": "4444"}

{'a': '1111', 'b': '2222', 'c': '3333', 'd': '4444'}

json.load()用于從json文件中讀取數(shù)據(jù)。

import json

emb_filename = ("./emb_json.json")

jsObj = json.load(open(emb_filename))

print(jsObj)

print(type(jsObj))

for key in jsObj.keys():

print("key:%s value: %s" %(key,jsObj.get(key)))

======================

{'a': '1111', 'b': '2222', 'c': '3333', 'd': '4444'}

key:a value: 1111

key:b value: 2222

key:c value: 3333

key:d value: 4444

總結(jié)

以上是生活随笔為你收集整理的python 文档操作_Python 文件操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。