Python小白完成的第一個實際需求(附整個過程)

	正值肺炎危險期,來辦公地點半個月了,都無法去辦公室,想着到辦公室後的幾千只交易要迅速的開發完,頭都是麻的,按正常的開發流程走肯定是即便累死,也無法在很短的時間內完成開發,只能通過工具了。
	Java最熟悉,但是要去實現讀excel、解析xml、模擬http訪問也不會太容易,無意中看到python做這些事情會方便很多,花了一週時間從完全沒接觸到把工具開發完,本來需要累死累活至少一個月的工作量,被一週“輕鬆”搞定,這種心情忒爽了。

寫下這篇文章,主要是記錄整個學習開發過程,加深對python這門語言的瞭解。同時爲學java的夥伴們提供一些技術參考
主要涉及的python知識點:
1.環境準備及pycharm工具使用。
2.怎麼引入第三方包
3.字符類型轉換
4.日期時間格式化
5.解析xml文件(新增、查詢、修改)
6.讀取並生成excel
7.怎麼生產zip包

8.怎麼操作數據庫
9.怎麼模擬http的post請求

1.python安裝
直接去官網選擇最新版本:python3.8
https://www.python.org/
好像跟操作系統版本關係不大,我操作系統是64位,安裝的32位也能跑,安裝過程跟jdk安裝過程類似,包括設置環境變量。軟件下載下來,直接安裝默認安裝步驟一個個安裝完即可,確定是否安裝好直接cmd後,輸入python,如果出現下圖信息,表示安裝和path路徑設置的沒問題。
在這裏插入圖片描述
此時可以通過python命令直接運行python文件了,但是,昨晚一個用慣可視化工具的人員,直接用命令行來執行python文件多少有點不習慣,所以還是先了解下python語言的可視化工具。直接有了解過sublime可以編譯和運行python腳本,操作界面跟我們常見的文本編輯工具基本相同。但是直接寫了個helloworld 的python腳本,竟然還沒運行起來。這個沒深究,主要還是感覺這個工具還是不怎麼方便,就沒有像java那樣的eclipse或者idea來完成開發嗎,比較要實現高效的開發,犀利的工具是很重要的。最終還是通過強大的互聯網,通過對比python的各種可視化工具,最終選擇了pycharm,安裝完後,打開工程界面,才知道這就是我苦苦找尋的,跟idea界面基本相同(後來才發現跟idea是同一公司的),我的helloworld腳本以下調試通過!感覺這成功了一半。
要python爲你賣命,我們還是得花點時間瞭解它才行,花了幾分鐘在還是要看下python的語法才行,此時我選擇了非常棒的菜鳥教程,因爲我就是菜鳥!https://www.runoob.com/python/python-tutorial.html ,在裏面大概看了下變量聲明、if語句和for循環語句怎麼寫,然後就開始敲起代碼來了,然後我像取當前日期需要引入相關的介質包,後面發現首先需要安裝pip工具才行。操作步驟如下:
File->Settings
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
把工具安裝後,就可以按快捷鍵自動引入介質包了,快捷鍵:“alt +enter”
2.離線安裝介質包

因爲我當前環境是可以連接網絡的,所以可以通過上述方法取得介質包,但是我開發的腳本最終需要去非互聯網環境執行,所以還得了解離線安裝。
步驟一:找到在互聯網環境安裝好的介質包路徑,所有安裝的介質包都在下面目錄下
C:\Users\Administrator\AppData\Local\Programs\Python\Python38-32\Lib\site-packages
步驟二:將site-packages文件夾拷貝覆蓋離線環境下對應的目錄。重啓pycharm,發現還不能用,還得執行下面步驟。
步驟三:打開File-settings目錄
在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述
最後點擊上圖的“+” 把我們覆蓋的那個目錄加進去,重啓pycharm,所有的介質包就一次全部引入了

3.字符類型轉換:
int類型需要轉換成string類型,按照java那種,可以選擇‘int類型+“”’ 最後發現不行,
常見的類型轉換如下:
int(x [,base ]) 將 x 轉換爲一個整數
long(x [,base ]) 將 x 轉換爲一個長整數
float(x ) 將 x 轉換到一個浮點數
complex(real [,imag ]) 創建一個複數
str(x ) 將對象 x 轉換爲字符串
repr(x ) 將對象 x 轉換爲表達式字符串
eval(str ) 用來計算在字符串中的有效 Python 表達式,並返回一個
tuple(s ) 將序列 s 轉換爲一個元組
list(s ) 將序列 s 轉換爲一個列表
chr(x ) 將一個整數轉換爲一個字符

4.當前日期格式化輸出
因我的需求主要是要生產一個唯一的ID(不考慮多線程),和當前日期,可以使用下面語句就可以滿足,前提需要引入time包
##系統當前日期 作用生成唯一ID
currentdate = time.strftime("%Y%m%d%H%M%S", time.localtime())
##跟操作時間相關都取版本生成時間
currentdate1 = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

5.解析和生成xml
	我的需求是a.讀xml字符串取其中幾個字段、b.讀xml文件取信息並修改部分內容作爲另一個xml的字段值。
	類似於java語言,python解析xml的方式有以下幾種
	sax、dom和elementtree,大概找了幾個例子,沒有細看,發現還是elementtree比較簡單。
 		doc = ET.parse('protocol_context/'+typeHead+'_http.xml')  # 先把xml文件加載進來
        root = doc.getroot()  # 獲取元素的根節點
        root.set('id', typeHead + sheet1_content2.cell(row, 0).value + typeEnd)
        root.set('sys', sheet1_content2.cell(row, 0).value)
        books1 = root.find('common')
        books1.set('uri', sheet1_content2.cell(row, 2).value)
        str1 = str(ET.tostring(root))
6.讀取excel和生成excel文件
def read_system_relation_excel():
    workBook = xlrd.open_workbook('E:/新建 Microsoft Excel 工作表.xlsx');
    content2 = workBook.sheet_by_name('Sheet1');
    workbook = xlwt.Workbook(encoding='GBK')
    booksheet = workbook.add_sheet('Sheet 1')

    if content2.nrows > 1:
        SERVICE_DEFINITION = ''
        SERVICE_AUTH = ''
        SERVICE_INFO = ''
        for row in range(1, content2.nrows):

            if str(content2.cell(row, 0).value) != '':
                column1 = str(content2.cell(row, 1).value)


                column2 = str(content2.cell(row, 2).value)
               # print(column2.split("_", 3)[1])
                column3 = str(content2.cell(row, 3).value)
               # print(column3.split("_", 3)[0]+column3.split("_", 3)[1])
                column4 = str(content2.cell(row, 4).value)
                #print(column3.split("_", 3)[0]+column3.split("_", 3)[1])
                if len(column3.split("_", 3)) == 2:
                    booksheet.write(row,0,column3.split("_", 3)[0].strip() + column3.split("_", 3)[1].strip())
                elif len(column3.split("_", 3)) == 3:
                    booksheet.write(row, 0, column3.split("_", 3)[0].strip() + column3.split("_", 3)[1].strip()+ '_'+column3.split("_", 3)[1].strip())
                else:
                    print(column3)
                booksheet.write(row, 1, column4)
                booksheet.write(row, 2, 'V1')
                booksheet.write(row, 3, 'throughServiceFlow')
                booksheet.write(row, 4, 'ps'+column2.split("_", 3)[1]+'Connector')
                booksheet.write(row, 5, 'pc'+column2.split("_", 3)[1]+'Adaptor')
                #消費系統
                booksheet.write(row, 6, column1.split("_", 3)[0])
                booksheet.write(row, 7, column1.split("_", 3)[1])
                booksheet.write(row, 8, column1.split("_", 3)[2])

                #服務系統
                booksheet.write(row, 9, column2.split("_", 3)[0])
                booksheet.write(row, 10, column2.split("_", 3)[1])
                booksheet.write(row, 11, column2.split("_", 3)[2])
                workbook.save('template2.xls')
7.怎麼生成zip包
	一行代碼搞定,是不是很簡單
 ## 生成版本包.zip文件 第一個參數是文件名,“zip"是文件後綴,第三個是壓縮包裏的文件夾
    shutil.make_archive(dirpath, "zip", dirpath)

8.python操作數據庫
如果要使用python操作mysql或者oracle,需要先下載相關驅動包,然後引入相關工具包
mysql : import pymysql
oracle :import cx_Oracle

	 conn = pymysql.connect('192.168.8.116',user = "root",passwd = "root1234",db = "testdb")
     cur = conn.cursor()
     cur.execute(sql)
    res = cur.fetchall()
    for row in res:
        print(str(row[1])+":服務開始授權")
        AuthParam1 = {
            'versionNo': row[0],
             'serviceCode' : row[1],
             'serviceSystem': row[2],
             'channelSystem': row[3],
             'packageType': row[4]
        }
9.python模擬http的post請求
 依賴requests包,兩行代碼搞定!
	conn1 = requests.session()
    resp1 = conn1.post('http://' + url + '/login/', data={'username': 'admin', 'password': '21218cca77804d2ba1922c33e0151105'})
    AuthUrl = 'http://' + url + '/serviceAuth/autoAuthDo'
    AuthRsp1 = conn.post(AuthUrl, data=AuthParam1)
   作爲資深的java開發人員,在這短期的使用python來做這工具的過程中跟java有以下不同
   1.python變量無需聲明,經常會不確定變量的類型;
   2.習慣將各語句用() 和 {} ,在python開發中很多時候是非法字符
   3.習慣加上”;“作爲每行的結束符號,在python不需要
   4.python操作各種文件、excel、txt、zip文件,python實現我們常見的功能代碼都比java簡單。

  好了,這算是這疫情期間自學的收穫之一吧,既獲取的新的知識和技能,又能解決工作中的實際問題。 學永無止境!人自當自強不息!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章