python 總結(十五):操作目錄,JSON

一、操作目錄

1.查看系統   

>>> import os
>>> os.name # 操作系統類型
'posix'
os.uname()

2.查看環境變量

os.environ
"""差啊看環境變量列表"""
os.environ.get('PATH')
"""得到環境變量值"""

3.目錄操作

# 查看當前目錄的絕對路徑:
os.path.abspath('.')
'/Users/michael'
#在某個目錄下創建一個新目錄,首先把新目錄的完整路徑表示出來:
os.path.join('/Users/michael', 'testdir')
'/Users/michael/testdir'
# 然後創建一個目錄:
os.mkdir('/Users/michael/testdir')
# 刪掉一個目錄:
os.rmdir('/Users/michael/testdir')
"""要拆分路徑時,也不要直接去拆字符串,而要通過os.path.split()函數,
這樣可以把一個路徑拆分爲兩部分,後一部分總是最後級別的目錄或文件名:"""
os.path.split('/Users/michael/testdir/file.txt')
('/Users/michael/testdir', 'file.txt')
"""os.path.splitext()可以直接讓你得到文件擴展名,"""
os.path.splitext('/path/to/file.txt')
('/path/to/file', '.txt')
# 對文件重命名:
os.rename('test.txt', 'test.py')
# 刪掉文件:
os.remove('test.py')
"""比如我們要列出當前目錄下的所有目錄"""
[x for x in os.listdir('.') if os.path.isdir(x)]
['.lein', '.local', '.m2', '.npm', '.ssh', '.Trash', '.vim', 'Applications', 'Desktop', ...]
"""要列出所有的.py文件"""
[x for x in os.listdir('.') if os.path.isfile(x) and os.path.splitext(x)[1]=='.py']
['apis.py', 'config.py', 'models.py', 'pymonitor.py', 'test_db.py', 'urls.py', 'wsgiapp.py']

4.用遞歸法打印某個目錄下的所有文件以及子目錄下文件

import os
def print_file(path):
    if os.path.isfile(path):
        print(path)
    else:
        listdir = os.listdir(path)
        dirlist = [x for x in listdir if os.path.isdir(os.path.join(path, x))]
        filelist = [x for x in listdir if os.path.isfile(os.path.join(path, x))]
        if dirlist:
            for dirpath in dirlist:
                print_file(os.path.join(path,dirpath))
        for filepath in filelist:
            print(os.path.join(path,filepath))
print_file(r"E:\soft\python3")

5.簡化版

import os
def fi(path):
    if os.path.isfile(path):
        print(path)
    else:
        L = os.listdir(path)
        for i in L:
            fi(os.path.join(path, i))
fi(r"E:\soft")

6.系統函數os.work()版

import os
path ="E:\soft"
for root,dirs,files in os.walk(path):
    for file in files:
        print(os.path.join(root,file))

二、JSON

1、字典轉化成字符串

>>> import json
>>> d = dict(name='Bob', age=20, score=88)
>>> json.dumps(d)
'{"age": 20, "score": 88, "name": "Bob"}'

2、字符串轉化成字典

>>> json_str = '{"age": 20, "score": 88, "name": "Bob"}'
>>> json.loads(json_str)
{'age': 20, 'score': 88, 'name': 'Bob'}

3、類轉化成字符串

import json

class Student(object):
    def __init__(self, name, age, score):
        self.name = name
        self.age = age
        self.score = score
def student2dict(std):
    return {
        'name': std.name,
        'age': std.age,
        'score': std.score
    }
print(json.dumps(s, default=student2dict))

或者:

import json
class Student(object):
    def __init__(self, name, age, score):
        self.name = name
        self.age = age
        self.score = score
print(json.dumps(s, default=lambda obj: obj.__dict__))

4、同樣的道理,如果我們要把JSON反序列化爲一個Student對象實例,loads()方法首先轉換出一個dict對象,然後,我們傳入的object_hook函數負責把dict轉換爲Student實例:

def dict2student(d):
    return Student(d['name'], d['age'], d['score'])

5、總結

   dumps()方法返回一個str,內容就是標準的JSON。類似的,

   dump()方法可以直接把JSON寫入一個file-like Object

         要把JSON反序列化爲Python對象,用loads()或者對應的load()方法,前者把JSON的字符串反序列化,後者從file-like Object中讀取字符串並反序列化

          如果你要處理的是文件而不是字符串,你可以使用 json.dump() 和 json.load() 來編碼和解碼JSON數據。

6.思考:

obj = dict(name='小明', age=20)
"""obj是python對象"""
s = json.dumps(obj, ensure_ascii=True)
"""s是json字符串"""

        由於JSON標準規定JSON編碼是UTF-8,所以我們總是能正確地在Python的str與JSON的字符串之間轉換。

        如果ensure_ascii爲true(默認值),則保證輸出轉義所有傳入的非ASCII字符。如果ensure_ascii爲false,則這些字符將按原樣輸出。

        答:ensure_ascii = True,此時,非ascii 編爲unicode編碼。否則原樣輸出。

     

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章