【show me the code】Python練習題&語法筆記 2

lxg0387發表於2019-02-23

04. 統計文字中各單詞出現的次數

0. 問題描述及程式碼

任一個英文的純文字檔案,統計其中的單詞出現的個數。

# -*- coding: utf-8 -*-

import re

fin = open('./source/04-text.txt','r')
str = fin.read()

# 編譯正規表示式,生成一個正規表示式物件
reObj = re.compile('\b?(\w+)\b?') 
# 在字串中找到正規表示式所匹配的所有子串,並返回一個列表,沒有則返回空列表。
# 注意: match 和 search 是匹配一次 findall 匹配所有。
words = reObj.findall(str)

wordDict = dict() # 建立字典

for word in words:
    if word.lower() in wordDict:
        wordDict[word.lower()] += 1 # 詞做key,次數做value
    else:
        wordDict[word] = 1
        
for key, value in wordDict.items():
    print('%s: %s' % (key, value))

1. 正規表示式

Python 正規表示式 | 菜鳥教程

正規表示式 - 廖雪峰的官方網站

05. 修改圖片尺寸

0. 問題描述及程式碼

你有一個目錄,裝了很多照片,把它們的尺寸變成都不大於 iPhone5 解析度的大小。

# -*- coding: utf-8 -*-

from PIL import Image
import os

path = 'source/05/pics'
resultPath = 'source/05/result'
if not os.path.isdir(resultPath): # 判斷物件是不是目錄
    os.mkdir(resultPath) # 以數字許可權模式建立目錄
for picName in os.listdir(path): # 返回指定的資料夾包含的檔案或資料夾的名字的列表。
    picPath = os.path.join(path, picName)
    print(picPath)
    with Image.open(picPath) as im:
        w, h = im.size
        n = w / 1366 if (w / 1366) >= (h / 640) else h / 640
        im.thumbnail((w / n, h / n)) #生成圖尺寸在1366*640範圍內
        im.save(resultPath+'/finish_' + picName.split('.')[0] + '.jpg','jpeg')
        

1. os模組

Python3 OS 檔案/目錄方法 | 菜鳥教程

06. 統計幾篇日記最重要的詞

0. 問題描述及程式碼(有bug)

你有一個目錄,放了你一個月的日記,都是 txt,為了避免分詞的問題,假設內容都是英文,請統計出你認為每篇日記最重要的詞。

import os
import re

def findWord(DirPath):
    if not os.path.isdir(DirPath):
        return
    fileList = os.listdir(DirPath)
    reObj = re.compile('\b?(\w+)\b?')
    for file in fileList:
        filePath = os.path.join(DirPath, file)
        if os.path.isflile(filePath) and os.path.splitext(filePath)[1] == '.txt':
            with open(filePath) as f:
                data = f.read()
                words = reObj.findall(data)
                wordDict = dict()
                for word in words:
                    word = word.lower()
                    if word in ['a', 'the', 'to']:
                        continue
                    if owrd in wordDict:
                        wordDict[word] += 1
                    else:
                        wordDict[word] = 1
            ansList = sorted(wordDict.items(), key=lambda t: t[1], reverse=True)
            print('file: %s->the most word: %s' % (file, ansList[1])
            
if __name__ == '__main__':
    findWord('source/06')

07. 統計一下你寫過多少行程式碼

0. 問題描述及程式碼

有個目錄,裡面是你自己寫過的程式,統計一下你寫過多少行程式碼。包括空行和註釋,但是要分別列出來。

# -*- coding: utf-8 -*-

import os
import re

def stat_code(dir_path):
    if not os.path.isdir(dir_path):
        return
    exp_re = re.compile(r'^#.*')
    file_list = os.listdir(dir_path)
    print("%s\t%s\t%s\t%s" % ('file', 'all_lines', 'space_lines', 'exp_lines'))
    for file in file_list:
        file_path = os.path.join(dir_path, file)
        if os.path.isfile(file_path) and os.path.splitext(file_path)[1] == '.py':
            #下面程式碼不加 utf-8,內部編碼轉化成gbk編碼(預設)時會出錯
            with open(file_path, encoding='utf-8') as f:
                all_lines = 0
                space_lines = 0
                exp_lines = 0
                for line in f.readlines():
                    all_lines += 1
                    if line.strip() == '':
                        space_lines += 1
                        continue
                    exp = exp_re.findall(line.strip())
                    if exp:
                        exp_lines += 1
            print("%s\t%s\t%s\t%s" % (file, all_lines, space_lines, exp_lines))
         
if __name__ == '__main__':
    stat_code('.')

08. 找出HTML檔案的正文

0. 問題描述及程式碼

# -*- coding: utf-8 -*-

import requests, re
from bs4 import BeautifulSoup

url = 'https://translate.google.cn/'
data = requests.get(url)
r = re.findall(r'<body>[\s\S]*</body>',data.text)
print(r[0])

print('------------------------------')
soup = BeautifulSoup(data.text,'html.parser')
print(soup.body.text)

09. 找出HTML檔案的連結

0. 問題描述及程式碼

# -*- coding: utf-8 -*-

import requests, re , os
from bs4 import BeautifulSoup

url = 'http://translate.google.cn/'
data = requests.get(url)
# urls = re.findall(r'<a.*href=\"(.*?)\".*</a>,data.text)
# print(urls)

soup = BeautifulSoup(data.text, 'html.parser')
urls = soup.findAll('a')
for u in urls:
    print(u['href'])

相關文章