Python 基础入门 第五课 作业 xiao


使用线程池实现对50个文本文件进行单词出现频率统计并汇总结果
import os, shutil
import string, random
import threadpool, multiprocessing, threading

vowels = 'aeiou'
word_rate = {}
lock = threading.Lock()
    
def gen_word(min, max):
    wordLen = int(random.random() * (max - min) + min)
    word = ''
    for i in range(wordLen):
        word += gen_syllable()
    return word

def gen_syllable():
    r = random.random()
    if r < 0.333:
        return word_part('c')
    elif r < 0.666:
        return word_part('v')
    else:
        return word_part('c') + word_part('v') + word_part('c')

def word_part(ctype):
    if ctype == 'c':
        return random.sample([x for x in string.lowercase if x not in vowels], 1)[0]
    else:
        return random.sample(vowels, 1)[0]

def genWordFile(folder):
    i = 0
    while i < 50:
        file_name = os.path.join(folder, 'words' + str(i) + '.txt')

        with open(file_name, 'w') as f:
            for j in range(10):
                genNewWord = gen_word(2, 3)
                f.write(genNewWord + '\n')

        yield file_name
        i += 1
        
def getWordRateDict(file):
    with open(file, 'r') as f:
        word = f.readline().rstrip()
        while word:
            global word_rate
            lock.acquire()
            try:
                if word in word_rate:
                    word_rate[word] = word_rate[word] + 1
                else:
                    word_rate[word] = 1
            except:
                pass
            finally:
                lock.release()
            word = f.readline().rstrip()

abs_dir = os.path.abspath('./homework5')
if os.path.exists(abs_dir):
    shutil.rmtree(abs_dir)
os.mkdir(abs_dir)
print(abs_dir)

g = genWordFile(abs_dir)
pool = threadpool.ThreadPool(multiprocessing.cpu_count())
tasks = threadpool.makeRequests(getWordRateDict, list(g))
[pool.putRequest(task) for task in tasks]
pool.wait()
print(word_rate)


读取文本文件,将全部内容倒序后写入新文件
import os
def reverse_file(file, newFile):
    if not os.path.exists(file):
        pass
    else:
        if os.path.exists(newFile):
            os.remove(newFile)
        lines = []
        with open(file, 'r') as f:
            line = f.readline().rstrip()[::-1]
            while line:
                lines.insert(0, line)
                line = f.readline().rstrip()[::-1]

        with open(newFile, 'w') as newF:
            for line in lines:
                newF.write(line + '\n')
                
abs_path = os.path.abspath('./Homework5/persistence.txt')
new_abs_path = os.path.abspath('./Homework5/new_persistence.txt')
if os.path.exists(abs_path):
    os.remove(abs_path)
with open(abs_path, 'w') as f:
    f.write('Nothing in the world can take the place of Persistence.\n')
    f.write('Talent will not; nothing is more common than unsuccessful men with talent. Genius will not;\n')
    f.write('unrewarded genius is almost a proverb. Education will not;\n')
    f.write('the world is full of educated derelicts.\n')
    f.write('Persistence and determination alone are omnipotent.\n')
    f.write('The slogan "Press On" has solved and always will solve the problems of the human race.\n')
    
if os.path.exists(new_abs_path):
    os.remove(new_abs_path)
reverse_file(abs_path, new_abs_path)
已邀请:

要回复问题请先登录注册

返回顶部