023--python os、sys、json、pickle、xml模塊

1、os模塊

os.getcwd() 獲取當前工做目錄,即當前python腳本工做的目錄路徑
>>> os.getcwd()
'C:\\Python36'

os.chdir("dirname")  改變當前腳本工做目錄;至關於shell下cd

os.curdir  返回當前目錄: ('.')

os.pardir  獲取當前目錄的父目錄字符串名:('..')

os.makedirs('dirname1/dirname2')    可生成多層遞歸目錄

os.removedirs('dirname1')    若目錄爲空,則刪除,並遞歸到上一級目錄,如若也爲空,則刪除,依此類推

os.mkdir('dirname')    生成單級目錄;至關於shell中mkdir dirname

os.rmdir('dirname')    刪除單級空目錄,若目錄不爲空則沒法刪除,報錯;至關於shell中rmdir dirname

os.listdir('dirname')    列出指定目錄下的全部文件和子目錄,包括隱藏文件,並以列表方式打印

os.remove()  刪除一個文件

os.rename("oldname","newname")  重命名文件/目錄

os.stat('path/filename')  獲取文件/目錄信息

os.sep    輸出操做系統特定的路徑分隔符,win下爲"\\",Linux下爲"/"

os.linesep    輸出當前平臺使用的行終止符,win下爲"\r\n",Linux下爲"\n"

os.pathsep    輸出用於分割文件路徑的字符串 win下爲;,Linux下爲:

os.name    輸出字符串指示當前使用平臺。win->'nt'; Linux->'posix'

os.system("bash command")  運行shell命令,直接顯示

os.environ  獲取系統環境變量

os.path.abspath(path)  返回path規範化的絕對路徑

os.path.split(path)  將path分割成目錄和文件名二元組返回

os.path.dirname(path)  返回path的目錄。其實就是os.path.split(path)的第一個元素

os.path.basename(path)  返回path最後的文件名。如何path以/或\結尾,那麼就會返回空值。即os.path.split(path)的第二個元素

os.path.exists(path)  若是path存在,返回True;若是path不存在,返回False

os.path.isabs(path)  若是path是絕對路徑,返回True

os.path.isfile(path)  若是path是一個存在的文件,返回True。不然返回False

os.path.isdir(path)  若是path是一個存在的目錄,則返回True。不然返回False

os.path.join(path1[, path2[, ...]])  將多個路徑組合後返回,第一個絕對路徑以前的參數將被忽略

os.path.getatime(path)  返回path所指向的文件或者目錄的最後存取時間

os.path.getmtime(path)  返回path所指向的文件或者目錄的最後修改時間

os.path.getsize(path) 返回path的大小

 

os路徑處理
#方式一:推薦使用
import os
#具體應用
import os,sys
possible_topdir = os.path.normpath(os.path.join(
    os.path.abspath(__file__),
    os.pardir, #上一級
    os.pardir,
    os.pardir
))
sys.path.insert(0,possible_topdir)


#方式二:不推薦使用
os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

 

 2、sys模塊

sys.argv           命令行參數List,第一個元素是程序自己路徑
sys.exit(n)        退出程序,正常退出時exit(0)
sys.version        獲取Python解釋程序的版本信息
sys.maxint         最大的Int值
sys.path           返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變量的值
sys.platform       返回操做系統平臺名稱

 

  進度條html

import sys,time

for i in range(50):
    sys.stdout.write('%s\r' %('#'*i))
    sys.stdout.flush()
    time.sleep(0.1)

'''
注意:在pycharm中執行無效,請到命令行中以腳本的方式執行
'''

 

3、json模塊

  若是咱們要在不一樣的編程語言之間傳遞對象,就必須把對象序列化爲標準格式,好比XML,但更好的方法是序列化爲JSON,由於JSON表示出來就是一個字符串,能夠被全部語言讀取,也能夠方便地存儲到磁盤或者經過網絡傳輸。JSON不只是標準格式,而且比XML更快,並且能夠直接在Web頁面中讀取,很是方便。node

  序列化:  python

  咱們把對象(變量)從內存中變成可存儲或傳輸的過程稱之爲序列化,在Python中叫pickling,在其餘語言中也被稱之爲serialization,marshalling,flattening等等,都是一個意思。shell

  序列化以後,就能夠把序列化後的內容寫入磁盤,或者經過網絡傳輸到別的機器上。編程

  反過來,把變量內容從序列化的對象從新讀到內存裏稱之爲反序列化,即unpickling。json

#----------------------------序列化
import json
 
dic={'name':'alvin','age':23,'sex':'male'}
print(type(dic))#<class 'dict'>
 
j=json.dumps(dic)
print(type(j))#<class 'str'>
 
 
f=open('序列化對象','w')
f.write(j)  #-------------------等價於json.dump(dic,f)
f.close()
#-----------------------------反序列化

import json f=open('序列化對象') data=json.loads(f.read())# 等價於data=json.load(f)

 

  注意:bash

import json
#dct="{'1':111}"#json 不認單引號
#dct=str({"1":111})#報錯,由於生成的數據仍是單引號:{'one': 1}

dct='{"1":"111"}'
print(json.loads(dct))

#conclusion:
#不管數據是怎樣建立的,只要知足json格式,就能夠json.loads出來,不必定非要dumps的數據才能loads

 

4、pickle模塊

  Pickle的問題和全部其餘編程語言特有的序列化問題同樣,就是它只能用於Python,而且可能不一樣版本的Python彼此都不兼容,所以,只能用Pickle保存那些不重要的數據,不能成功地反序列化也不要緊。網絡

##----------------------------序列化
import pickle
 
dic={'name':'alvin','age':23,'sex':'male'}
 
print(type(dic))#<class 'dict'>
 
j=pickle.dumps(dic)
print(type(j))#<class 'bytes'>
 
 
f=open('序列化對象_pickle','wb')#注意是w是寫入str,wb是寫入bytes,j是'bytes'
f.write(j)  #-------------------等價於pickle.dump(dic,f)
 
f.close()
#-------------------------反序列化
import pickle
f=open('序列化對象_pickle','rb')
 
data=pickle.loads(f.read())#  等價於data=pickle.load(f)
 
print(data['age'])

 

5、xml模塊

  xml是實現不一樣語言或程序之間進行數據交換的協議編程語言

<?xml version="1.0"?>
<data>
    <country name="Liechtenstein">
        <rank updated="yes">2</rank>
        <year>2008</year>
        <gdppc>141100</gdppc>
        <neighbor name="Austria" direction="E"/>
        <neighbor name="Switzerland" direction="W"/>
    </country>
    <country name="Singapore">
        <rank updated="yes">5</rank>
        <year>2011</year>
        <gdppc>59900</gdppc>
        <neighbor name="Malaysia" direction="N"/>
    </country>
    <country name="Panama">
        <rank updated="yes">69</rank>
        <year>2011</year>
        <gdppc>13600</gdppc>
        <neighbor name="Costa Rica" direction="W"/>
        <neighbor name="Colombia" direction="E"/>
    </country>
</data>

xml數據
xml格式

 

  增刪查改xml:ide

import xml.etree.ElementTree as ET
 
tree = ET.parse("xmltest.xml")
root = tree.getroot()
print(root.tag)
 
#遍歷xml文檔
for child in root:
    print(child.tag, child.attrib)
    for i in child:
        print(i.tag,i.text)
 
#只遍歷year 節點
for node in root.iter('year'):
    print(node.tag,node.text)
#---------------------------------------

import xml.etree.ElementTree as ET
 
tree = ET.parse("xmltest.xml")
root = tree.getroot()
 
#修改
for node in root.iter('year'):
    new_year = int(node.text) + 1
    node.text = str(new_year)
    node.set("updated","yes")
 
tree.write("xmltest.xml")
 
 
#刪除node
for country in root.findall('country'):
   rank = int(country.find('rank').text)
   if rank > 50:
     root.remove(country)
 
tree.write('output.xml')
View Code

 

  建立xml文檔:

import xml.etree.ElementTree as ET
 
 
new_xml = ET.Element("namelist")
name = ET.SubElement(new_xml,"name",attrib={"enrolled":"yes"})
age = ET.SubElement(name,"age",attrib={"checked":"no"})
sex = ET.SubElement(name,"sex")
sex.text = '33'
name2 = ET.SubElement(new_xml,"name",attrib={"enrolled":"no"})
age = ET.SubElement(name2,"age")
age.text = '19'
 
et = ET.ElementTree(new_xml) #生成文檔對象
et.write("test.xml", encoding="utf-8",xml_declaration=True)
 
ET.dump(new_xml) #打印生成的格式
View Code

 

學習資料來源:

相關文章
相關標籤/搜索