python測試工具開發(fā)自學(xué)每周一練-2018-06

python每周一練

每周五發(fā)布python需求癞揉,所有需求都來自實(shí)際企業(yè)畦木。下周五發(fā)布參考答案。

2018-06-25 用遞歸的方式實(shí)現(xiàn)階乘

Return n! = 123...n

參考答案

2018-06-22 字符串和正則表達(dá)式小練習(xí)

試題1:

下面哪個個字符串定義有錯誤?

A谬俄,r'C:\Program Files\foo\bar'
B患蹂,r'C:\Program Files\foo\bar'
C, r'C:\Program Files\foo\bar\'
D秧倾,r'C:\Program Files\foo\bar\\'

參考答案:B

試題2:

現(xiàn)有 類似'python3快速入門教程2數(shù)值與序列3列表'的字符串究恤,字符規(guī)則如下:
1,行首有英文或數(shù)字組合费薄,中間有中文硝全,后面又有英文或數(shù)字組合
2, 要求用正則表達(dá)式提取第一個中文字段,比如上面的“快速入門教程”

參考答案

#!python
In [1]: import re

In [2]: t = 'python3快速入門教程2數(shù)值與序列3列表'

In [3]: re.findall('^\w+(..*?)\w+',t, re.ASCII)
Out[3]: ['快速入門教程']

2018-06-15 睜閉眼數(shù)據(jù)分析

現(xiàn)有如下睜閉眼數(shù)據(jù)

#!python

$ head data.csv 
# 左眼睜閉眼分?jǐn)?shù) 左眼有效分?jǐn)?shù) 右眼睜閉眼分?jǐn)?shù) 右眼有效分?jǐn)?shù) 圖片名稱
0.123603 9.835913 9.470212 9.889045,/home/andrew/code/data/common/Eyestate/ocular_base/close/1.jpg
0.179463 9.816979 2.074970 9.901421,/home/andrew/code/data/common/Eyestate/ocular_base/close/10.jpg
0.673736 9.925372 0.001438 9.968187,/home/andrew/code/data/common/Eyestate/ocular_base/close/11.jpg
0.593570 9.905622 0.001385 9.986063,/home/andrew/code/data/common/Eyestate/ocular_base/close/12.jpg
0.222101 9.974337 0.005272 9.985535,/home/andrew/code/data/common/Eyestate/ocular_base/close/13.jpg
1.105360 9.978926 0.007232 9.986403,/home/andrew/code/data/common/Eyestate/ocular_base/close/14.jpg
5.622934 9.955227 5.909572 9.969641,/home/andrew/code/data/common/Eyestate/ocular_base/close/15.jpg
0.010507 9.965939 0.005150 9.990325,/home/andrew/code/data/common/Eyestate/ocular_base/close/16.jpg
0.043546 9.986520 0.014031 9.982257,/home/andrew/code/data/common/Eyestate/ocular_base/close/17.jpg
6.176013 9.848222 4.293341 9.929223,/home/andrew/code/data/common/Eyestate/ocular_base/close/18.jpg

要求:

  • 篩選出未識別到人臉的數(shù)據(jù)(左眼睜閉眼分?jǐn)?shù)值為-1)
  • 篩選出圖片格式錯誤的數(shù)據(jù)(左眼睜閉眼分?jǐn)?shù)值為-2)
  • 篩選出閉眼識別為睜眼的數(shù)據(jù)(圖片名包含close楞抡,但是睜閉眼有一個大于9.5)
  • 篩選出睜眼識別為閉眼的數(shù)據(jù)(圖片名包含open伟众,但是睜閉眼都小于9.5)
  • 篩選出無效識別為有效的數(shù)據(jù)(圖片名包含invalid,但是有效分有一個大于9.5)
  • 篩選出有效識別為無效的數(shù)據(jù)(圖片名包含valid召廷,但是有效分都小于9.5)

代碼和參考代碼地址

2018-06-14 創(chuàng)建三色圖片

創(chuàng)建如下的三色圖片凳厢,像素600*400

dutchflag.jpg

python圖像處理參考庫

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Author:    xurongzhong#126.com wechat:pythontesting qq:37391319
# 技術(shù)支持 釘釘群:21745728(可以加釘釘pythontesting邀請加入) 
# qq群:144081101 591302926  567351477
# CreateDate: 2018-6-12
# dutchflag.py

from PIL import Image

def dutchflag(width, height):
    """Return new image of Dutch flag."""
    img = Image.new("RGB", (width, height))
    for j in range(height):
        for i in range(width):
            if j < height/3:
                img.putpixel((i, j), (255, 0, 0))
            elif j < 2*height/3:
                img.putpixel((i, j), (0, 255, 0))
            else:
                img.putpixel((i, j), (0, 0, 255))
    return img

def main():
    img = dutchflag(600, 400)
    img.save("dutchflag.jpg")
    
main()

2018-06-12 數(shù)據(jù)分析:篩選列B包含列A內(nèi)容的列

來自群python數(shù)據(jù)分析人工智能 521070358的提問

有類似如下結(jié)構(gòu)的大量數(shù)據(jù)

#!python
{'A':['Ford', 'Toyota', 'Ford','Audi'], 
 'B':['Ford F-Series pickup', 'Camry', 'Ford Taurus/Taurus X', 'Audi test']}

現(xiàn)在想:
1,輸出列B包含列A內(nèi)容的記錄
2竞慢,輸出列A為Ford或Toyota的記錄

參考代碼:

#!python
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# Author:    xurongzhong#126.com wechat:pythontesting qq:37391319
# 技術(shù)支持 釘釘群:21745728(可以加釘釘pythontesting邀請加入) 
# qq群:144081101 591302926  567351477
# CreateDate: 2018-6-012

import pandas as pd


def test(x):
    if x['A'] in x['B']:
        return True
    else:
        return False

df = pd.DataFrame( {'A':['Ford', 'Toyota', 'Ford','Audi'], 
                    'B':['Ford F-Series pickup', 'Camry', 'Ford Taurus/Taurus X', 'Audi test']} )


print(df)
# 輸出列B包含列A內(nèi)容的記錄
print(df[df.apply(test, axis=1)])

# lambda 方式
print(df[df.apply(lambda x: x['A'] in x['B'], axis=1)])

# 輸出列A為Ford或Toyota的記錄
print(df[df['A'].str.match('Ford|Toyota')])

執(zhí)行結(jié)果:

#!python
        A                     B
0    Ford  Ford F-Series pickup
1  Toyota                 Camry
2    Ford  Ford Taurus/Taurus X
3    Audi             Audi test
      A                     B
0  Ford  Ford F-Series pickup
2  Ford  Ford Taurus/Taurus X
3  Audi             Audi test
      A                     B
0  Ford  Ford F-Series pickup
2  Ford  Ford Taurus/Taurus X
3  Audi             Audi test
        A                     B
0    Ford  Ford F-Series pickup
1  Toyota                 Camry
2    Ford  Ford Taurus/Taurus X

本節(jié)代碼地址

2018-06-11 python數(shù)據(jù)機(jī)構(gòu)基礎(chǔ)面試題

生成

#!python
[-0.1,  0. ,  0.1,  0.2,  0.3,  0.4,  0.5,  0.6,  0.7,  0.8,  0.9,
        1. ,  1.1]

參考:

#!python
import numpy as np

[x / 10.0 for x in range(-1, 11)]
np.arange(-0.1, 1.1, 0.1)

2018-06-08 用turtle繪制長度為10像素的正方形(初級)

image.png

參考代碼:

#!python
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# Author:    xurongzhong#126.com wechat:pythontesting qq:37391319
# 技術(shù)支持 釘釘群:21745728(可以加釘釘pythontesting邀請加入) 
# qq群:144081101 591302926  567351477
# CreateDate: 2018-6-07

from turtle import *
 
forward(100)
left(90)
forward(100)
left(90)
forward(100)
left(90)
forward(100)
left(90)

exitonclick()

注意用使用python3.6.0或更高版本, 命令行執(zhí)行比較好先紫。

延伸學(xué)習(xí)

image.png

參考代碼:

#!python
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# Author:    xurongzhong#126.com wechat:pythontesting qq:37391319
# 技術(shù)支持 釘釘群:21745728(可以加釘釘pythontesting邀請加入) 
# qq群:144081101 591302926  567351477
# CreateDate: 2018-6-07

from turtle import *
pensize(7)
penup()
goto(-200, -100)
pendown()
fillcolor("red")
begin_fill()
goto(-200, 100)
goto(200, -100)
goto(200, 100)
goto(-200, -100)
end_fill()
exitonclick()

2018-06-07 計算不同版本人臉識別框的重合面積

現(xiàn)有某圖片,版本1識別的坐標(biāo)為:(60, 188, 260, 387)筹煮,版本2識別的坐標(biāo)為(106, 291, 340, 530)))遮精。格式為left, top, right, buttom。
請計算:公共的像素總數(shù)败潦,版本1的像素總數(shù)本冲,版本2的像素總數(shù),版本1的重合面積比例劫扒,版本2的重合面積比例.

參考代碼:

#!python
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# Author:    xurongzhong#126.com wechat:pythontesting qq:37391319
# 技術(shù)支持 釘釘群:21745728(可以加釘釘pythontesting邀請加入) 
# qq群:144081101 591302926  567351477
# CreateDate: 2018-6-07


def get_area(pos):
    left, top, right, buttom = pos
    left = max(0, left)
    top = max(0, top)
    width = right - left
    height = buttom - top
    return (width*height, left, top, right, buttom)


def overlap(pos1, pos2):
    area1, left1, top1, right1, buttom1 = get_area(pos1)
    area2, left2, top2, right2, buttom2 = get_area(pos2)
    
    left = max(left1, left2)
    top = max(top1, top2)
    left = max(0, left)
    top = max(0, top)    
    right = min(right1, right2) 
    buttom = min(buttom1, buttom2)
    
    if right <= left or buttom <= top:
        area = 0
    else:
        area = (right - left)*(buttom - top)
        
    return (area, area1, area2, float(area)/area1, float(area)/area2)    

print(overlap((60, 188, 260, 387), (106, 291, 340, 530)))

詳細(xì)代碼地址

執(zhí)行

#!python
$ python3 overlap.py 
(14784, 39800, 55926, 0.3714572864321608, 0.2643493187426242)

2018-06-06 json格式轉(zhuǎn)換

現(xiàn)有 人臉標(biāo)注的海量數(shù)據(jù)檬洞,部分參見:data

要求輸出:
1,files.txt

#!python
image_1515229323784.ir
image_1515235832391.ir
image_1515208991161.ir
image_1515207265358.ir
image_1521802748625.ir
image_1515387191011.ir
...

2, 坐標(biāo)信息 poses.txt
文件名沟饥、left, top, right, buttom添怔,width,height

#!python
image_1515229323784.ir,4,227,234,497,230,270
image_1515235832391.ir,154,89,302,240,148,151
image_1515208991161.ir,76,369,309,576,233,207
image_1515207265358.ir,44,261,340,546,296,285
...

3贤旷,比對文件:

首先:# 后面的為序列號广料,從1開始遞增
3 640 480 1及后面3行暫時視為固定。后面一行1 后面為4個坐標(biāo)left, top, right, buttom遮晚。

#!python
# 1
image_1515229323784.ir
3 640 480 1
0
1
1 4 227 234 497 
# 2
image_1515235832391.ir
3 640 480 1
0
1
1 154 89 302 240
# 3
...

參考代碼:

#!python
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import shutil
import os
import glob
import json
import pprint
import json

import data_common

directory = 'data'
files = data_common.find_files_by_type(directory,'json')

i = 1
file_list = []
results = []
poses = []
for filename in files:
    d = json.load(open(filename))
    name = d['image']['rawFilename'].strip('.jpg')
    pos = d['objects']['face'][0]['position']
    num = len(d['objects']['face'])
    if num > 1:
        print(filename)
        print(name)
        pprint.pprint(d['objects']['face'])
    out = "# {}\n{}\n3 640 480 1\n0\n{}\n".format(i, name, num)
    for face in d['objects']['face']:
        pos = face['position']
        top = round(pos['top'])
        bottom = round(pos['bottom'])
        left = round(pos['left'])
        right = round(pos['right'])
        out = out + "1 {} {} {} {}\n".format(left, top, right, bottom)
        poses.append("{},{},{},{},{},{},{}".format(name, 
            left, top, right, bottom, right - left, bottom -top))
    i = i + 1
    #print(out)
    file_list.append(name)
    results.append(out.rstrip('\n'))

data_common.output_file("files.txt",file_list)
data_common.output_file("results.txt",results)
data_common.output_file("poses.txt",poses)

詳細(xì)代碼地址

2018-06-01 正則表達(dá)式及拼音排序

有某群的某段聊天記錄

現(xiàn)在要求輸出排序的qq名性昭,結(jié)果類似如下:

#!python

[..., '本草隱士', 'jerryyu', '可憐的櫻桃樹', '叻風(fēng)云', '歐陽-深圳白芒',  ...]
    

需求來源:有個想批量邀請某些qq群的活躍用戶到自己的群拦止。又不想鋪天蓋地去看聊天記錄县遣。

參考資料:python文本處理庫

參考代碼:

#!python
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# Author:    xurongzhong@126.com wechat:pythontesting qq:37391319
# 技術(shù)支持 釘釘群:21745728(可以加釘釘pythontesting邀請加入) 
# qq群:144081101 591302926  567351477
# CreateDate: 2018-6-1

import re
from pypinyin import lazy_pinyin

name = r'test.txt'

text = open(name,encoding='utf-8').read()
#print(text)

results = re.findall(r'(:\d+)\s(.*?)\(\d+', text)

names = set()
for item in results:
    names.add(item[1])  

keys = list(names)
keys = sorted(keys)

def compare(char):
    try:
        result = lazy_pinyin(char)[0][0]
    except Exception as e:
        result = char
    return result
    
keys.sort(key=compare)
print(keys)
    

執(zhí)行示例:

1糜颠,把qq群的聊天記錄導(dǎo)出為txt格式,重命名為test.txt

2, 執(zhí)行:

#!python

$ python3 qq.py 
['Sally', '^^O^^', 'aa催乳師', 'bling', '本草隱士', '純中藥治療陽痿早泄', '長夜無荒', '東方~慈航', '干金草', '廣東-曾超慶', '紅梅* 渝', 'jerryyu', '可憐的櫻桃樹', '叻風(fēng)云', '歐陽-深圳白芒', '勝昔堂~元亨', '蜀中~眉豆萧求。', '陜西渭南逸清閣*無為', '吳寧……任', '系統(tǒng)消息', '于立偉', '倚窗望岳', '煙霞靄靄', '燕子', '張強(qiáng)', '滋味', '?買個罐頭 吃西餐', '【大俠】好好', '【大俠】面向大浩湫耍~純中藥治燙傷', '【宗師】吳寧……任', '【宗師】紅梅* 渝', '【少俠】焚琴煮鶴', '【少俠】笨笨', '【掌門】溆浦?山野人家']
    

上述代碼地址

2018-05-25 旋轉(zhuǎn)圖片

把/home/andrew/code/tmp_photos2的jpg圖片旋轉(zhuǎn)270度,放在/home/andrew/code/tmp_photos3

參考資料:python圖像處理庫

要求實(shí)現(xiàn)的命令行界面如下:

#!sh

$ python3 rotate.py -h
usage: rotate.py [-h] [-t TYPE] [-a ANGLE] [--version] src dst

功能:旋轉(zhuǎn)圖片

示例: $ python3 rotate.py /home/andrew/code/tmp_photos2 /home/andrew/code/tmp_photos3 -a 270
把/home/andrew/code/tmp_photos2的jpg圖片旋轉(zhuǎn)270度夸政,放在/home/andrew/code/tmp_photos3 

positional arguments:
  src         源目錄
  dst         目的目錄

optional arguments:
  -h, --help  show this help message and exit
  -t TYPE     文件擴(kuò)展名, 默認(rèn)為jpg
  -a ANGLE    旋轉(zhuǎn)角度元旬,默認(rèn)為90度,方向都為逆時針守问。
  --version   show program's version number and exit

旋轉(zhuǎn)前:

photo.jpg

旋轉(zhuǎn)后

photo.jpg

需求來源: 用戶拍的圖片人臉未必是頭在上匀归,下巴在下面,但是人臉識別的時扶正的識別效果比較好耗帕,為此...

參考代碼:

#!python
import glob
import os 
import argparse

from PIL import Image

import photos
import data_common

description = '''

功能:旋轉(zhuǎn)圖片

示例: $ python3 rotate.py /home/andrew/code/tmp_photos2 /home/andrew/code/tmp_photos3 -a 270
'''

parser = argparse.ArgumentParser(description=description, 
                                 formatter_class=argparse.RawTextHelpFormatter)
parser.add_argument('src', action="store", help=u'源目錄')
parser.add_argument('dst', action="store", help=u'目的目錄')
parser.add_argument('-t', action="store", dest="type", default="jpg", 
                    help=u'文件擴(kuò)展名, 默認(rèn)為jpg')
parser.add_argument('-a', action="store", dest="angle", default=90, type=int,
                    help=u'旋轉(zhuǎn)角度穆端,默認(rèn)為90度,方向都為逆時針仿便。')
parser.add_argument('--version', action='version',
                    version='%(prog)s 1.0 Rongzhong xu 2018 04 26')
options = parser.parse_args()

data_common.check_directory(options.dst)
files = data_common.find_files_by_type(options.src, filetype=options.type)
photos.rotate(files, options.dst, options.angle)
 

參考資料

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市嗽仪,隨后出現(xiàn)的幾起案子荒勇,更是在濱河造成了極大的恐慌,老刑警劉巖闻坚,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沽翔,死亡現(xiàn)場離奇詭異,居然都是意外死亡鲤氢,警方通過查閱死者的電腦和手機(jī)搀擂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來卷玉,“玉大人哨颂,你說我怎么就攤上這事∠嘀郑” “怎么了威恼?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長寝并。 經(jīng)常有香客問我箫措,道長,這世上最難降的妖魔是什么衬潦? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任斤蔓,我火速辦了婚禮,結(jié)果婚禮上镀岛,老公的妹妹穿的比我還像新娘弦牡。我一直安慰自己友驮,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布驾锰。 她就那樣靜靜地躺著卸留,像睡著了一般。 火紅的嫁衣襯著肌膚如雪椭豫。 梳的紋絲不亂的頭發(fā)上耻瑟,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天,我揣著相機(jī)與錄音赏酥,去河邊找鬼喳整。 笑死,一個胖子當(dāng)著我的面吹牛裸扶,可吹牛的內(nèi)容都是我干的算柳。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼姓言,長吁一口氣:“原來是場噩夢啊……” “哼瞬项!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起何荚,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤囱淋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后餐塘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體妥衣,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年戒傻,在試婚紗的時候發(fā)現(xiàn)自己被綠了税手。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡需纳,死狀恐怖芦倒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情不翩,我是刑警寧澤兵扬,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站口蝠,受9級特大地震影響器钟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜妙蔗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一傲霸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦昙啄、人聲如沸乃摹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至播歼,卻和暖如春伶跷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背秘狞。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工叭莫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人烁试。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓雇初,卻偏偏與公主長得像,于是被迫代替她去往敵國和親减响。 傳聞我的和親對象是個殘疾皇子靖诗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容