真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python全棧開發(fā)之常用模塊-創(chuàng)新互聯(lián)

No.1 sys

sys模塊是與Python解釋器交互的一個接口

創(chuàng)新互聯(lián)服務項目包括鄒城網(wǎng)站建設、鄒城網(wǎng)站制作、鄒城網(wǎng)頁制作以及鄒城網(wǎng)絡營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯(lián)網(wǎng)行業(yè)的解決方案,鄒城網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務的客戶以成都為中心已經(jīng)輻射到鄒城省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!
  • sys.argv 命令行參數(shù)List,第一個元素是程序本身路徑
  • sys.exit(n) 退出程序,正常退出時exit(0),錯誤退出sys.exit(1)
  • sys.version 獲取Python解釋程序的版本信息
  • sys.path 返回模塊的搜索路徑,初始化時使用PYTHONPATH環(huán)境變量的值
  • sys.platform 返回操作系統(tǒng)平臺名稱

No.2 os

os模塊是與操作系統(tǒng)交互的一個接口

  • os.getcwd() 獲取當前工作目錄,即當前python腳本工作的目錄路徑
  • 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 輸出操作系統(tǒng)特定的路徑分隔符,win下為"\",Linux下為"/"
  • os.linesep 輸出當前平臺使用的行終止符,win下為"\t\n",Linux下為"\n"
  • os.pathsep 輸出用于分割文件路徑的字符串 win下為;,Linux下為:
  • os.name 輸出字符串指示當前使用平臺。win->'nt'; Linux->'posix'
  • os.system("bash command") 運行shell命令,直接顯示
  • os.popen("bash command).read() 運行shell命令,獲取執(zhí)行結(jié)果
  • os.environ 獲取系統(tǒng)環(huán)境變量
  • os.path.abspath(path) 返回path規(guī)范化的絕對路徑 os.path.split(path) 將path分割成目錄和文件名二元組返回 os.path.dirname(path) 返回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(path2[, path3[, ...]]) 將多個路徑組合后返回,第一個絕對路徑之前的參數(shù)將被忽略
  • os.path.getatime(path) 返回path所指向的文件或者目錄的最后訪問時間
  • os.path.getmtime(path) 返回path所指向的文件或者目錄的最后修改時間
  • os.path.getsize(path) 返回path的大小

No.3 re

re模塊的使用過程

# 導入re模塊
import re
# 使用match方法進行匹配操作
result = re.match(正則表達式,要匹配的字符串)
# 如果上一步匹配到數(shù)據(jù)的話,可以使用group方法來提取數(shù)據(jù)
result.group()

匹配單個字符

字符 功能
.匹配任意1個字符(除了\n)
[ ]匹配[ ]中列舉的字符
\d匹配數(shù)字,即0-9
\D匹配非數(shù)字,即不是數(shù)字
\s匹配空白,即 空格,tab鍵
\S匹配非空白
\w匹配單詞字符,即a-z、A-Z、0-9、_
\W匹配非單詞字符

匹配多個字符

字符 功能
*匹配前一個字符出現(xiàn)0次或者無限次,即可有可無
+匹配前一個字符出現(xiàn)1次或者無限次,即至少有1次
?匹配前一個字符出現(xiàn)1次或者0次,即要么有1次,要么沒有
{m}匹配前一個字符出現(xiàn)m次
{m,n}匹配前一個字符出現(xiàn)從m到n次

匹配開頭或結(jié)尾

字符 功能
^匹配字符串開頭
$匹配字符串結(jié)尾

匹配分組

字符 功能
|匹配左右任意一個表達式
(ab)將括號中字符作為一個分組
\num引用分組num匹配到的字符串
(?P)分組起別名
(?P=name)引用別名為name分組匹配到的字符串

match 僅僅查找第一個位置,如果找不到,返回None

import re
result = re.match("kernel","kernel.cn")
result.group()result = re.match("kernel","kernel.cn")
result.group() # kernel

serach 僅僅返回一個結(jié)果

import re
ret = re.search(r"\d+", "閱讀次數(shù)為 9999")
ret.group() # 9999

findall 返回最多能匹配的個數(shù)

import re

ret = re.findall(r"\d+", "python = 9999, c = 7890, c++ = 12345")
print(ret) # ['9999', '7890', '12345']

sub 將匹配到的數(shù)據(jù)進行替換

import re

ret = re.sub(r"\d+", '998', "python = 997")
print(ret) # Python = 998

貪婪和非貪婪

正則表達式模式中使用到通配字,那它在從左到右的順序求值時,會盡量抓取滿足匹配最長字符串,在我們上面的例子里面,+會從字符串的啟始處抓取滿足模式的最長字符,其中包括我們想得到的第一個整型字段的中的大部分,\d+只需一位字符就可以匹配,而+則匹配了從字符串起始符合規(guī)則的所有字符,解決方式就是非貪婪操作符?,這個操作符可以用在*、+、?的后面,要求正則匹配的越少越好

r的作用

Python中字符串前面加上 r 表示原生字符串,與大多數(shù)編程語言相同,正則表達式里使用"\"作為轉(zhuǎn)義字符,這就可能造成反斜杠困擾,假如你需要匹配文本中的字符"\",那么使用編程語言表示的正則表達式里將需要4個反斜杠"\":前兩個和后兩個分別用于在編程語言里轉(zhuǎn)義成反斜杠,轉(zhuǎn)換成兩個反斜杠后再在正則表達式里轉(zhuǎn)義成一個反斜杠,Python里的原生字符串很好地解決了這個問題,有了原生字符串,你再也不用擔心是不是漏寫了反斜杠,寫出來的表達式也更直

No.4 time

時間處理模塊

time模塊的幾種轉(zhuǎn)換方式

  • time.time() 時間戳
  • time.strftime("%Y-%m-%d %X") 格式化的時間字符串
  • time.localtime() 本地時區(qū)的struct_time
  • time.gmtime() UTC時區(qū)的struct_time

時間戳轉(zhuǎn)換為結(jié)構化時間

  • now_time = time.time() 時間戳
  • struct_time = time.localtime(now_time) 時間戳轉(zhuǎn)換為結(jié)構化時間

結(jié)構化時間轉(zhuǎn)化為時間戳

  • struct_time = time.localtime(time.time()) 結(jié)構化時間
  • now_time = time.mktime(struct_time) 結(jié)構化時間轉(zhuǎn)換為時間戳

結(jié)構化時間轉(zhuǎn)化為字符串時間

  • struct_time = time.localtime(time.time()) 結(jié)構化時間
  • str_time = time.strftime("%Y-%m-%d",struct_time) 結(jié)構化時間轉(zhuǎn)換為字符串時間

字符串時間轉(zhuǎn)化為結(jié)構化時間

  • str_time = "2018-04-17" 字符串時間
  • struct_time = time.strptime(str_time,"%Y-%m-%d") 字符串時間轉(zhuǎn)換為結(jié)構化時間

No.5 timedate

日期處理模塊

  • timedate.date.today() 輸出日期
  • timedate.date.fromtimestamp() 接收時間戳,轉(zhuǎn)換成日期
  • timedate.current_time() 輸出日期時間毫秒值
  • timedate.current_time.timetuple() 將日期時間毫秒值轉(zhuǎn)換成struct_time
  • timedate.current_time.replace() 替換日期

No.6 json

只能適用于Python的基本數(shù)據(jù)類型,跨語言

  • json.loads() 接收一個字符串,轉(zhuǎn)換成Python數(shù)據(jù)類型
  • json.load() 從文化中讀取字符串,轉(zhuǎn)換成Python數(shù)據(jù)類型
  • json.dumps() 接收一個Python數(shù)據(jù)類型。轉(zhuǎn)換成字符串
  • json.dump() 接收一個Python數(shù)據(jù)類型,轉(zhuǎn)換成字符串,寫入到文件中

No.7 pickle

適用于Python的所有數(shù)據(jù)類型,但是只針對Python

  • pickle.loads() 接收字節(jié),轉(zhuǎn)換成Python數(shù)據(jù)類型
  • pickle.load() 從文化中讀取字節(jié),轉(zhuǎn)換成Python數(shù)據(jù)類型
  • pickle.dumps() 接收一個Python數(shù)據(jù)類型。轉(zhuǎn)換成字節(jié)
  • pickle.dump() 接收一個Python數(shù)據(jù)類型,轉(zhuǎn)換成字節(jié),寫入到文件中

No.8 logging

日志處理模塊

日志的級別
默認情況下Python的logging模塊將日志打印到了標準輸出中,且只顯示了大于等于WARNING級別的日志,這說明默認的日志級別設置為WARNING(日志級別等級CRITICAL > ERROR > WARNING > INFO > DEBUG)

日志的配置

logging.basicConfig(level=logging.DEBUG,  
                    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',  
                    datefmt='%a, %d %b %Y %H:%M:%S',  
                    filename='/tmp/test.log',  
                    filemode='w')  
logging.debug('debug message')  
logging.info('info message')  
logging.warning('warning message')  
logging.error('error message')  
logging.critical('critical message')

配置參數(shù)

  • logging.basicConfig() 函數(shù)中可通過具體參數(shù)來更改logging模塊默認行為,可用參數(shù)有:
  • filename:用指定的文件名創(chuàng)建FiledHandler,這樣日志會被存儲在指定的文件中。
  • filemode:文件打開方式,在指定了filename時使用這個參數(shù),默認值為“a”還可指定為“w”。
  • format 指定handler使用的日志顯示格式。
  • datefmt:指定日期時間格式。
  • level:設置rootlogger(后邊會講解具體概念)的日志級別
  • stream:用指定的stream創(chuàng)建StreamHandler??梢灾付ㄝ敵龅絪ys.stderr,sys.stdout或者* 文件(f=open(‘test.log’,’w’)),默認為sys.stderr。若同時列出了filename和stream兩個參數(shù),則stream參數(shù)會被忽略。
    format參數(shù)中可能用到的格式化串:
  • %(name)s Logger的名字
  • %(levelno)s 數(shù)字形式的日志級別
  • %(levelname)s 文本形式的日志級別
  • %(pathname)s 調(diào)用日志輸出函數(shù)的模塊的完整路徑名,可能沒有
  • %(filename)s 調(diào)用日志輸出函數(shù)的模塊的文件名
  • %(module)s 調(diào)用日志輸出函數(shù)的模塊名
  • %(funcName)s 調(diào)用日志輸出函數(shù)的函數(shù)名
  • %(lineno)d 調(diào)用日志輸出函數(shù)的語句所在的代碼行
  • %(created)f 當前時間,用UNIX標準的表示時間的浮 點數(shù)表示
  • %(relativeCreated)d 輸出日志信息時的,自Logger創(chuàng)建以 來的毫秒數(shù)
  • %(asctime)s 字符串形式的當前時間。默認格式是 “2003-07-08 16:49:45,896”。逗號后面的是毫秒
  • %(thread)d 程ID??赡軟]有
  • %(threadName)s 線程名??赡軟]有
  • %(process)d 進程ID??赡軟]有
  • %(message)s 用戶輸出的消息

logger對象配置

logger = logging.getLogger('kernel') # 創(chuàng)建logging對象
logger.setLevel(logging.DEBUG) # 指定全局被處理消息級別(全局處理消息級別要高于或等于局部消息處理級別)

ch = logging.StreamHandler() # 屏幕流
ch.setLevel(logging.DEBUG) # 指定局部被處理消息級別

fh = logging.FileHandler("access.log") # 文件流
fh.setLevel(logging.WARNING) # 指定局部被處理消息級別

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') # 創(chuàng)建時間格式

ch.setFormatter(formatter) # 設置屏幕流時間格式
fh.setFormatter(formatter) # 設置文本流時間格式

logger.addHandler(ch) # 將屏幕流對象添加到logger中
logger.addHandler(fh) # 將文本流對象添加到logger中

logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')

No.9 hashlib

加密模塊

obj = hashlib.md5() # 創(chuàng)建hashlib對象
obj = hashlib.md5(bytes('kernel',encoding='utf-8')) # 創(chuàng)建hashlib對象并加言
obj.update(bytes('hello',encoding='utf-8')) # 加密
ret = obj.hexdigest() # 獲取密文

No.10 configparser

操縱配置文件模塊

import configparser
cfg = configparser.ConfigParser() # 創(chuàng)建configparser對象
cfg.read('conf',encoding='utf-8') # 讀取配置文件

secs = cfg.sections() # 獲取所有節(jié)點
print(secs)

options = cfg.options(secs[0]) # 獲取指定節(jié)點的所有key
print(options)

item = cfg.items(secs[0]) # 獲取指定節(jié)點的鍵值對組合
print(item)

val = cfg.get(secs[0],options[0]) # 獲取指定節(jié)點下的指定key的值
print(val)

sec = cfg.remove_section(secs[0]) # 刪除指定節(jié)點
cfg.write(open('conf','w'))
print(sec)

sec = cfg.has_section('jiedian1') # 檢查是否存在該節(jié)點
print(sec)
sec = cfg.add_section('jiedian1') # 添加該節(jié)點
cfg.write(open('conf','w'))
print(sec)

cfg.set(secs[0],options[0],'111') # 修改指定節(jié)點下指定key的值
cfg.write(open('conf','w'))

cfg.remove_option(secs[0],options[0]) # 刪除指定節(jié)點下指定鍵值對
cfg.write(open('conf','w'))

No.11 XML

from xml.etree import ElementTree as ET
from xml.dom import minidom

# 修改XML
"""
解析XML的方式有兩種
1.解析字符串方式
將字符串解析成XML對象,root代指XML文件的根節(jié)點
str_xml = open('xo.xml', 'r').read()
root = ET.XML(str_xml)
2.解析文件方式
獲取xml文件的根節(jié)點
tree = ET.parse("xo.xml")
root = tree.getroot()
"""

# 遍歷XML的所有內(nèi)容
et = ET.parse('conf.xml')
root = et.getroot() # 獲取根節(jié)點
print(root)

print(root.tag) # 頂層標簽

for child in root: # 遍歷XML文檔的第二層
    print(' ' + child.tag,child.attrib) # 第二層節(jié)點的標簽名和標簽屬性
    for i in child: # 遍歷XML文檔的第三層
        print('     ' + i.tag,i.attrib) # 第三層節(jié)點的標簽名和標簽屬性
        print('         ' + str(i.text)) # 第三層節(jié)點的屬性

# 遍歷XML的指定節(jié)點
for node in root.iter('year'): # 遍歷XML的所有year節(jié)點
    print(node.tag, node.text) # 節(jié)點的標簽名稱和內(nèi)容

# 節(jié)點的標簽名稱和內(nèi)容并修改節(jié)點內(nèi)容
for node in root.iter('year'): # 遍歷XML的所有year節(jié)點
    print(node.tag, node.text) # 節(jié)點的標簽名稱和內(nèi)容
    new_year = int(node.text) + 1 # 將year節(jié)點的內(nèi)容增加1
    node.text = str(new_year)
    node.set('name', 'kernel') # 設置屬性和值
    node.set('age', '18')
    del node.attrib['name'] # 刪除屬性

# 刪除節(jié)點
for country in root.findall('country'): # 遍歷data下的所有country節(jié)點
    rank = int(country.find('rank').text) # 獲取每一個country節(jié)點下rank節(jié)點的內(nèi)容
    if rank > 50:
        root.remove(country)  # 刪除指定country節(jié)點

"""
保存XML文件的方式也有兩種
1.解析字符串方式
tree = ET.ElementTree(root)
tree.write("newnew.xml", encoding='utf-8')
2.解析文件方式
tree.write("new.xml",encoding='utf-8')
"""

# 創(chuàng)建XML文件
# 方式一
root = ET.Element("famliy")

son1 = ET.Element('son', {'name': '大兒子'}) # 創(chuàng)建大兒子節(jié)點
son2 = ET.Element('son', {"name": '二兒子'}) # 創(chuàng)建二兒子節(jié)點

grandson1 = ET.Element('grandson', {'name': '大孫子'}) # 在大兒子中創(chuàng)建兩個孫子
grandson2 = ET.Element('grandson', {'name': '二孫子'})

son1.append(grandson1) # 將孫子添加到兒子節(jié)點中
son1.append(grandson2)

root.append(son1) # 把兒子添加到根節(jié)點中
root.append(son1)

tree = ET.ElementTree(root)
tree.write('oooo.xml',encoding='utf-8', short_empty_elements=False)

# 方式二
root = ET.Element("famliy")

son1 = root.makeelement('son', {'name': '大兒子'}) # 創(chuàng)建大兒子節(jié)點
son2 = root.makeelement('son', {"name": '二兒子'}) # 創(chuàng)建二兒子節(jié)點

grandson1 = root.makeelement('grandson', {'name': '大孫子'}) # 在大兒子中創(chuàng)建兩個孫子
grandson2 = root.makeelement('grandson', {'name': '二孫子'})

son1.append(grandson1) # 將孫子添加到兒子節(jié)點中
son1.append(grandson2)

root.append(son1) # 把兒子添加到根節(jié)點中
root.append(son1)

tree = ET.ElementTree(root)
tree.write('oooo.xml',encoding='utf-8', short_empty_elements=False)

# 方式三
root = ET.Element("famliy")

son1 = root.SubElement('son', {'name': '大兒子'}) # 創(chuàng)建大兒子節(jié)點
son2 = root.SubElement('son', {"name": '二兒子'}) # 創(chuàng)建二兒子節(jié)點

grandson1 = root.SubElement('grandson', {'name': '大孫子'}) # 在大兒子中創(chuàng)建兩個孫子
grandson2 = root.SubElement('grandson', {'name': '二孫子'})

son1.append(grandson1) # 將孫子添加到兒子節(jié)點中
son1.append(grandson2)

root.append(son1) # 把兒子添加到根節(jié)點中
root.append(son1)

tree = ET.ElementTree(root)
tree.write('oooo.xml',encoding='utf-8', short_empty_elements=False) # short_empty_elements=False 表示控制元素的格式如果值為False,沒有內(nèi)容,它們是作為一個單獨閉合的標簽,否則它們會以一對的形式發(fā)射開始/結(jié)束標記

# 方式四 原生保存的XML時默認無縮進,如果想要設置縮進的話,需要修改保存方式
def prettify(elem):
    """將節(jié)點轉(zhuǎn)換成字符串,并添加縮進。
    """
    rough_string = ET.tostring(elem, 'utf-8')
    reparsed = minidom.parseString(rough_string)
    return reparsed.toprettyxml(indent="\t")

root = ET.Element("famliy")

son1 = ET.Element('son', {'name': '大兒子'}) # 創(chuàng)建大兒子節(jié)點
son2 = ET.Element('son', {"name": '二兒子'}) # 創(chuàng)建二兒子節(jié)點

grandson1 = ET.Element('grandson', {'name': '大孫子'}) # 在大兒子中創(chuàng)建兩個孫子
grandson2 = ET.Element('grandson', {'name': '二孫子'})

son1.append(grandson1) # 將孫子添加到兒子節(jié)點中
son1.append(grandson2)

root.append(son1) # 把兒子添加到根節(jié)點中
root.append(son1)

raw_str = prettify(root)

f = open("xxxo.xml",'w',encoding='utf-8')
f.write(raw_str)
f.close()

No.12 subprocess

執(zhí)行系統(tǒng)命令模塊

call 執(zhí)行命令,返回狀態(tài)碼

  • ret = subprocess.call(["ls", "-l"], shell=False)
  • ret = subprocess.call("ls -l", shell=True)

check_call 執(zhí)行命令,如果執(zhí)行狀態(tài)碼是 0 ,則返回0,否則拋異常

  • subprocess.check_call(["ls", "-l"])
  • subprocess.check_call("exit 1", shell=True)

check_output 執(zhí)行命令,如果狀態(tài)碼是 0 ,則返回執(zhí)行結(jié)果,否則拋異常

  • subprocess.check_output(["echo", "Hello World!"])
  • subprocess.check_output("exit 1", shell=True)

subprocess.Popen(...) 用于執(zhí)行復雜的系統(tǒng)命令

  • args:shell命令,可以是字符串或者序列類型(如:list,元組)
  • bufsize:指定緩沖。0 無緩沖,1 行緩沖,其他 緩沖區(qū)大小,負值 系統(tǒng)緩沖
  • stdin, stdout, stderr:分別表示程序的標準輸入、輸出、錯誤句柄
  • preexec_fn:只在Unix平臺下有效,用于指定一個可執(zhí)行對象(callable object),它將在子進 程運行之前被調(diào)用
  • close_sfs:在windows平臺下,如果close_fds被設置為True,則新創(chuàng)建的子進程將不會繼承父進程的輸入、輸出、錯誤管道。
  • close_sfs:在windows平臺下,如果close_fds被設置為True,則新創(chuàng)建的子進程將不會繼承父進程的輸入、輸出、錯誤管道。
  • close_sfs:在windows平臺下,如果close_fds被設置為True,則新創(chuàng)建的子進程將不會繼承父進程的輸入、輸出、錯誤管道,所以不能將close_fds設置為True同時重定向子進程的標準輸入、輸出與錯誤(stdin, stdout, stderr)。
  • shell:同上
  • cwd:用于設置子進程的當前目錄
  • env:用于指定子進程的環(huán)境變量。如果env = None,子進程的環(huán)境變量將從父進程中繼承。
  • universal_newlines:不同系統(tǒng)的換行符不同,True -> 同意使用 \n
  • startupinfo與createionflags只在windows下有效,將被傳遞給底層的CreateProcess()函數(shù),用于設置子進程的一些屬性,如:主窗口的外觀,進程的優(yōu)先級等等
import subprocess
"""
終端輸入的命令分為兩種:
輸入即可得到輸出,如:ifconfig
輸入進行某環(huán)境,依賴再輸入,如:python
"""
# 執(zhí)行普通命令
ret1 = subprocess.Popen(["mkdir","t1"])
ret2 = subprocess.Popen("mkdir t2", shell=True)

# 在指定目錄上創(chuàng)建文件夾
obj = subprocess.Popen("mkdir t3", shell=True, cwd='/home/dev',)

# 依賴環(huán)境的命令
obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
obj.stdin.write("print(1)\n")
obj.stdin.write("print(2)")

out_error_list = obj.communicate()
print(out_error_list)

obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
out_error_list = obj.communicate('print("hello")')
print(out_error_list)

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。


分享題目:Python全棧開發(fā)之常用模塊-創(chuàng)新互聯(lián)
標題鏈接:http://weahome.cn/article/dcehgh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部