diff --git a/darcycool/0000/add_digits.py b/darcycool/0000/add_digits.py new file mode 100644 index 00000000..0964692f --- /dev/null +++ b/darcycool/0000/add_digits.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# 第 0000 题: 将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果。 类似于图中效果 + +from PIL import Image, ImageDraw, ImageFont + +dogIm = Image.open('photo.jpg') +width, high = dogIm.size +draw = ImageDraw.Draw(dogIm) +draw.text((width - 10, 0), '4', fill='red', font=ImageFont.truetype('Avenir.ttc', 10)) +dogIm.save('dog.jpg') diff --git a/darcycool/0000/dog.jpg b/darcycool/0000/dog.jpg new file mode 100644 index 00000000..f899717d Binary files /dev/null and b/darcycool/0000/dog.jpg differ diff --git a/darcycool/0000/photo.jpg b/darcycool/0000/photo.jpg new file mode 100644 index 00000000..2adb08f9 Binary files /dev/null and b/darcycool/0000/photo.jpg differ diff --git a/darcycool/0001/generator_activation_code.py b/darcycool/0001/generator_activation_code.py new file mode 100644 index 00000000..f27d2fdc --- /dev/null +++ b/darcycool/0001/generator_activation_code.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +# 第 0001 题: 做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)? +import string +import random + + +def id_generator(size=20, chars=string.ascii_uppercase + string.digits): + return ''.join(random.choice(chars) for _ in range(size)) + + +def get_activation_code(size=200): + activation_code = set() + for i in range(size): + activation_code.add(id_generator()) + return activation_code + +print(get_activation_code()) diff --git a/darcycool/0002/store_into_mysql.py b/darcycool/0002/store_into_mysql.py new file mode 100644 index 00000000..919c8bc9 --- /dev/null +++ b/darcycool/0002/store_into_mysql.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +# 第 0002 题: 将 0001 题生成的 200 个激活码(或者优惠券)保存到 MySQL 关系型数据库中。 +import random +import string + +import pymysql + + +def id_generator(size=20, chars=string.ascii_uppercase + string.digits): + return ''.join(random.choice(chars) for _ in range(size)) + + +def get_activation_code(size=200, len=20): + activation_code = set() + for i in range(size): + activation_code.add(id_generator(len)) + return activation_code + + +conn = pymysql.connect(host='127.0.0.1', + port=3306, + user='root', + passwd='1234', + db='darcy') +cursor = conn.cursor() +sql = 'insert into activation_code (code) VALUE (%s)' + +try: + cursor.executemany(sql, get_activation_code()) +except Exception as e: + print('执行Mysql: %s时出错: % s' % (sql, e)) +finally: + cursor.close() + conn.commit() + conn.close() diff --git a/darcycool/0003/store_into_redis.py b/darcycool/0003/store_into_redis.py new file mode 100644 index 00000000..86513d06 --- /dev/null +++ b/darcycool/0003/store_into_redis.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +# 第 0003 题: 将 0001 题生成的 200 个激活码(或者优惠券)保存到 Redis 非关系型数据库中。 +import random +import string +import redis + + +def id_generator(size=20, chars=string.ascii_uppercase + string.digits): + return ''.join(random.choice(chars) for _ in range(size)) + + +def get_activation_code(size=200, len=20): + activation_code = set() + for i in range(size): + activation_code.add(id_generator(len)) + return activation_code + + +def save_codes(codes): + r = redis.Redis(host='127.0.0.1', + port=6379, + db=0) + pipeline = r.pipeline() + for c in codes: + pipeline.sadd('code', c) + pipeline.execute() + return r.scard('code') + + +save_codes(get_activation_code(200, 20)) diff --git a/darcycool/0004/count_words.py b/darcycool/0004/count_words.py new file mode 100644 index 00000000..00a2f338 --- /dev/null +++ b/darcycool/0004/count_words.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# 第 0004 题: 任一个英文的纯文本文件,统计其中的单词出现的个数。 +import re + +file = open('words.txt', 'r') +str = file.read() + +reObj = re.compile('\b?(\w+)\b?') +words = reObj.findall(str) + +wordDict = dict() + +for word in words: + if word.lower() in wordDict: + wordDict[word.lower()] += 1 + else: + wordDict[word.lower()] = 1 + +for key, value in wordDict.items(): + print('%s: %s' % (key, value)) diff --git a/darcycool/0004/words.txt b/darcycool/0004/words.txt new file mode 100644 index 00000000..44e2c81c --- /dev/null +++ b/darcycool/0004/words.txt @@ -0,0 +1 @@ +The amount of stupidity in this story warrants that this is going to be somewhat long, so I start at the end: as the title says, an 18 year old guy was arrested two days ago for 'hacking' the new Budapest public transport e-Ticket system a week before, even though he immediately reported the vulnerability he found. diff --git a/darcycool/0005/change_images_size.py b/darcycool/0005/change_images_size.py new file mode 100644 index 00000000..7f1f7cf1 --- /dev/null +++ b/darcycool/0005/change_images_size.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +# 第 0005 题: 你有一个目录,装了很多照片,把它们的尺寸变成都不大于 iPhone5 分辨率的大小。 +import os + +from PIL import Image + +rootDir = 'imgs/' + + +def judge_size(img): + imgSize = img.size + return max(imgSize) > 1136 + + +def return_size(img): + max, min = img.size + if max > min: + return max, min + else: + return min, max + + +def change_size(img, max, min): + value = max / 1136 + min = int(min / value) + newImg = img.resize((1136, min), Image.ANTIALIAS) + return newImg + + +for parent, dirnames, filenames in os.walk(rootDir): + for filename in filenames: + fName = filename + print(filename) + filename = parent + os.sep + filename + fPostfix = os.path.splitext(filename)[1] + try: + img = Image.open(filename) + except: + print(filename) + continue + # img.load() + print(filename) + print(fPostfix) + if (fPostfix == '.jpg' or fPostfix == '.png' or fPostfix == '.JPG' or fPostfix != '.PNG'): + print(judge_size(img)) + if (judge_size(img) == True): + max, min = return_size(img) + newimg = change_size(img, max, min) + newimg.save(rootDir + os.sep + fName) diff --git a/darcycool/0005/imgs/photo.jpg b/darcycool/0005/imgs/photo.jpg new file mode 100644 index 00000000..2adb08f9 Binary files /dev/null and b/darcycool/0005/imgs/photo.jpg differ diff --git a/darcycool/0006/diary/01.txt b/darcycool/0006/diary/01.txt new file mode 100644 index 00000000..298696ee --- /dev/null +++ b/darcycool/0006/diary/01.txt @@ -0,0 +1,6 @@ +Our goal is to generate for you a complete and modern Web app or microservice architecture, unifying: + +A high-performance and robust Java stack on the server side with Spring Boot +A sleek, modern, mobile-first front-end with Angular and Bootstrap +A robust microservice architecture with JHipster Registry, Netflix OSS, ELK stack and Docker +A powerful workflow to build your application with Yeoman, Webpack/Gulp and Maven/Gradle diff --git a/darcycool/0006/diary/02.txt b/darcycool/0006/diary/02.txt new file mode 100644 index 00000000..0f16ee12 --- /dev/null +++ b/darcycool/0006/diary/02.txt @@ -0,0 +1,8 @@ +You can checkout a sample generated AngularJS 1 application here. + +You can checkout a sample generated Angular 4 application here. + +JHipster is Open Source, and all development is done on GitHub + +If you want to code with us, feel free to join! +If you like the project, please give us a star on GitHub diff --git a/darcycool/0006/diary/03.txt b/darcycool/0006/diary/03.txt new file mode 100644 index 00000000..3dbd3b72 --- /dev/null +++ b/darcycool/0006/diary/03.txt @@ -0,0 +1,9 @@ +Install JHipster yarn global add generator-jhipster + +Create a new directory and go into it mkdir myApp && cd myApp + +Run JHipster and follow instructions on screen jhipster + +Model your entities with JDL Studio and download the resulting jhipster-jdl.jh file + +Generate your entities with jhipster import-jdl jhipster-jdl.jh diff --git a/darcycool/0006/important_word.py b/darcycool/0006/important_word.py new file mode 100644 index 00000000..b92127a2 --- /dev/null +++ b/darcycool/0006/important_word.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- +# 第 0006 题: 你有一个目录,放了你一个月的日记,都是 txt,为了避免分词的问题,假设内容都是英文,请统计出你认为每篇日记最重要的词。 +import operator +import os +import re + +rootDir = 'diary/' + + +def count_words(filename, words): + wordDict = dict() + for word in words: + if word.lower() in wordDict: + wordDict[word.lower()] += 1 + else: + wordDict[word.lower()] = 1 + print('%s word:%s' % (filename, max(wordDict.items(), key=operator.itemgetter(1))[0])) + + +for top, dirnames, filenames in os.walk(rootDir): + for filename in filenames: + file = open(rootDir + filename, 'r') + str = file.read() + reObj = re.compile('\b?(\w+)\b?') + words = reObj.findall(str) + count_words(filename, words) + +from collections import Counter + +for top, dirnames, filenames in os.walk(rootDir): + for filename in filenames: + file = open(rootDir + filename, 'r') + str = file.read() + reObj = re.compile('\b?(\w+)\b?') + words = reObj.findall(str) + words = map(lambda w: w.lower(), words) + print(filename, Counter(words).most_common(1)) diff --git a/darcycool/0007/analysis_file.py b/darcycool/0007/analysis_file.py new file mode 100644 index 00000000..b35fc55e --- /dev/null +++ b/darcycool/0007/analysis_file.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +# 第 0007 题: 有个目录,里面是你自己写过的程序,统计一下你写过多少行代码。包括空行和注释,但是要分别列出来。 +import linecache + +file = open('source/change_images_size.py', 'r') + +fileLines = len(file.readlines()) + +print('代码行数:%s' % fileLines) + +blankLines = 0 + +for line in range(fileLines): + if len((linecache.getline('source/change_images_size.py', line).split())) == 0: + blankLines += 1 + +print(blankLines) diff --git a/darcycool/0007/source/change_images_size.py b/darcycool/0007/source/change_images_size.py new file mode 100644 index 00000000..7f1f7cf1 --- /dev/null +++ b/darcycool/0007/source/change_images_size.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +# 第 0005 题: 你有一个目录,装了很多照片,把它们的尺寸变成都不大于 iPhone5 分辨率的大小。 +import os + +from PIL import Image + +rootDir = 'imgs/' + + +def judge_size(img): + imgSize = img.size + return max(imgSize) > 1136 + + +def return_size(img): + max, min = img.size + if max > min: + return max, min + else: + return min, max + + +def change_size(img, max, min): + value = max / 1136 + min = int(min / value) + newImg = img.resize((1136, min), Image.ANTIALIAS) + return newImg + + +for parent, dirnames, filenames in os.walk(rootDir): + for filename in filenames: + fName = filename + print(filename) + filename = parent + os.sep + filename + fPostfix = os.path.splitext(filename)[1] + try: + img = Image.open(filename) + except: + print(filename) + continue + # img.load() + print(filename) + print(fPostfix) + if (fPostfix == '.jpg' or fPostfix == '.png' or fPostfix == '.JPG' or fPostfix != '.PNG'): + print(judge_size(img)) + if (judge_size(img) == True): + max, min = return_size(img) + newimg = change_size(img, max, min) + newimg.save(rootDir + os.sep + fName) diff --git a/darcycool/0008/find_html_body.py b/darcycool/0008/find_html_body.py new file mode 100644 index 00000000..e2ea0733 --- /dev/null +++ b/darcycool/0008/find_html_body.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# 第 0008 题: 一个HTML文件,找出里面的正文。 +import requests +from bs4 import BeautifulSoup + +r = 'https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html' +headers = { + 'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'} +url = requests.get(r, headers=headers) +soup = BeautifulSoup(url.text, 'html.parser') +print(soup.get_text()) diff --git a/darcycool/0009/find_link.py b/darcycool/0009/find_link.py new file mode 100644 index 00000000..ba1790bf --- /dev/null +++ b/darcycool/0009/find_link.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# 第 0009 题: 一个HTML文件,找出里面的链接。 + +import requests +from bs4 import BeautifulSoup + +url = r'https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html' +response = requests.get(url) +soup = BeautifulSoup(response.text) +for link in soup.find_all('a'): + print(link.get('href')) diff --git a/darcycool/0010/generator_verification_code.py b/darcycool/0010/generator_verification_code.py new file mode 100644 index 00000000..d9c9a97f --- /dev/null +++ b/darcycool/0010/generator_verification_code.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +# 第 0010 题: 使用 Python 生成类似于下图中的字母验证码图片 +import random +import string + +from PIL import ImageDraw, Image, ImageFont, ImageFilter + + +def get_code(): + return [random.choice(string.ascii_letters) for _ in range(4)] + + +def get_point_color(): + return (random.randint(65, 90), random.randint(65, 90), random.randint(65, 90)) + + +def get_color(): + return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127)) + + +def get_picture(): + width = 230 + height = 60 + # 画布 + im = Image.new('RGB', (width, height), (255, 255, 255)) + font = ImageFont.truetype('Avenir.ttc', 40) + draw = ImageDraw.Draw(im) + code = get_code() + + for t in range(4): + draw.text((60 * t + 10, 0), code[t], font=font, fill=get_color()) + + # 噪点 + for _ in range(random.randint(2000, 3000)): + draw.point((random.randint(0, width), random.randint(0, height)), fill=get_point_color()) + + # 模糊 + im = im.filter(ImageFilter.BLUR) + + im.save("".join(code) + '.jpg', 'jpeg') + + +if __name__ == '__main__': + get_picture() diff --git a/darcycool/0011/filter_words.py b/darcycool/0011/filter_words.py new file mode 100644 index 00000000..2614fc89 --- /dev/null +++ b/darcycool/0011/filter_words.py @@ -0,0 +1,71 @@ +# -*- coding: utf-8 -*- +# 第 0011 题: 敏感词文本文件 filtered_words.txt,里面的内容为以下内容,当用户输入敏感词语时,则打印出 Freedom,否则打印出 Human Rights。 + + +class DFAFilter: + def __init__(self): + self.keyword_chains = {} + self.delimit = '\x00' + + def add(self, keyword): + keyword = keyword.lower() + chars = keyword.strip() + if not chars: + return + level = self.keyword_chains + for i in range(len(chars)): + if chars[i] in level: + level = level[chars[i]] + else: + if not isinstance(level, dict): + break + for j in range(i, len(chars)): + level[chars[j]] = {} + last_level, last_char = level, chars[j] + level = level[chars[j]] + last_level[last_char] = {self.delimit: 0} + break + if i == len(chars) - 1: + level[self.delimit] = 0 + + def parse(self, path): + with open(path) as f: + for keyword in f: + self.add(keyword.strip()) + + def filter(self, message, repl="*"): + message = message.lower() + ret = [] + start = 0 + while start < len(message): + level = self.keyword_chains + step_ins = 0 + for char in message[start:]: + if char in level: + step_ins += 1 + if self.delimit not in level[char]: + level = level[char] + else: + print('Freedom') + return + else: + ret.append(message[start]) + break + else: + ret.append(message[start]) + start += 1 + + print('Human Rights') + return + + +if __name__ == "__main__": + + dfa = DFAFilter() + + file = open('filtered_words.txt', 'r') + for w in file.readlines(): + dfa.add(w) + + dfa.filter("你好北京北京京") + dfa.filter("你好") diff --git a/darcycool/0011/filtered_words.txt b/darcycool/0011/filtered_words.txt new file mode 100644 index 00000000..1b4f2244 --- /dev/null +++ b/darcycool/0011/filtered_words.txt @@ -0,0 +1,11 @@ +北京 +程序员 +公务员 +领导 +牛比 +牛逼 +你娘 +你妈 +love +sex +jiangge diff --git a/darcycool/0012/filter_words.py b/darcycool/0012/filter_words.py new file mode 100644 index 00000000..ed14cd66 --- /dev/null +++ b/darcycool/0012/filter_words.py @@ -0,0 +1,69 @@ +# -*- coding: utf-8 -*- +# 第 0012 题: 敏感词文本文件 filtered_words.txt,里面的内容 和 0011题一样,当用户输入敏感词语,则用 星号 * 替换,例如当用户输入「北京是个好城市」,则变成「**是个好城市」。 + + +class DFAFilter: + def __init__(self): + self.keyword_chains = {} + self.delimit = '\x00' + + def add(self, keyword): + keyword = keyword.lower() + chars = keyword.strip() + if not chars: + return + level = self.keyword_chains + for i in range(len(chars)): + if chars[i] in level: + level = level[chars[i]] + else: + if not isinstance(level, dict): + break + for j in range(i, len(chars)): + level[chars[j]] = {} + last_level, last_char = level, chars[j] + level = level[chars[j]] + last_level[last_char] = {self.delimit: 0} + break + if i == len(chars) - 1: + level[self.delimit] = 0 + + def parse(self, path): + with open(path) as f: + for keyword in f: + self.add(keyword.strip()) + + def filter(self, message, repl="*"): + message = message.lower() + ret = [] + start = 0 + while start < len(message): + level = self.keyword_chains + step_ins = 0 + for char in message[start:]: + if char in level: + step_ins += 1 + if self.delimit not in level[char]: + level = level[char] + else: + ret.append(repl * step_ins) + start += step_ins - 1 + break + else: + ret.append(message[start]) + break + else: + ret.append(message[start]) + start += 1 + + return ''.join(ret) + +if __name__ == "__main__": + + dfa = DFAFilter() + + file = open('filtered_words.txt', 'r') + for w in file.readlines(): + dfa.add(w) + + print(dfa.filter("你好北京北京京")) diff --git a/darcycool/0012/filtered_words.txt b/darcycool/0012/filtered_words.txt new file mode 100644 index 00000000..1b4f2244 --- /dev/null +++ b/darcycool/0012/filtered_words.txt @@ -0,0 +1,11 @@ +北京 +程序员 +公务员 +领导 +牛比 +牛逼 +你娘 +你妈 +love +sex +jiangge diff --git a/darcycool/0014/student.txt b/darcycool/0014/student.txt new file mode 100644 index 00000000..6851d593 --- /dev/null +++ b/darcycool/0014/student.txt @@ -0,0 +1,5 @@ +{ + "1":["张三",150,120,100], + "2":["李四",90,99,95], + "3":["王五",60,66,68] +} diff --git a/darcycool/0014/write_into_excel.py b/darcycool/0014/write_into_excel.py new file mode 100644 index 00000000..8a87f5ca --- /dev/null +++ b/darcycool/0014/write_into_excel.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# 第 0014 题: 纯文本文件 student.txt为学生信息,请将上述内容写到 student.xls 文件中 + +import json +from collections import OrderedDict + +import xlwt + +file = open('student.txt', 'r') + +students = json.loads(file.read(), object_pairs_hook=OrderedDict) + +wb = xlwt.Workbook() +ws = wb.add_sheet('学生信息') + +for index, items in enumerate(students.items()): + ws.write(index, 0, items[0]) + for j, v in enumerate(items[1]): + ws.write(index, j + 1, v) + +wb.save('学生信息.xls') diff --git "a/darcycool/0014/\345\255\246\347\224\237\344\277\241\346\201\257.xls" "b/darcycool/0014/\345\255\246\347\224\237\344\277\241\346\201\257.xls" new file mode 100644 index 00000000..96d1f5e0 Binary files /dev/null and "b/darcycool/0014/\345\255\246\347\224\237\344\277\241\346\201\257.xls" differ diff --git a/darcycool/0015/city.txt b/darcycool/0015/city.txt new file mode 100644 index 00000000..b5a6874d --- /dev/null +++ b/darcycool/0015/city.txt @@ -0,0 +1,5 @@ +{ + "1" : "上海", + "2" : "北京", + "3" : "成都" +} diff --git a/darcycool/0015/city.xls b/darcycool/0015/city.xls new file mode 100644 index 00000000..b020435b Binary files /dev/null and b/darcycool/0015/city.xls differ diff --git a/darcycool/0015/write_into_excel.py b/darcycool/0015/write_into_excel.py new file mode 100644 index 00000000..3eda8ff6 --- /dev/null +++ b/darcycool/0015/write_into_excel.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# 第 0015 题: 纯文本文件 city.txt为城市信息, 里面的内容(包括花括号),请将上述内容写到 city.xls 文件中 +import collections +import json + +import xlwt + +wb = xlwt.Workbook() +ws = wb.add_sheet('city') + +file = open('city.txt', 'r') +city = json.load(file) +print(city) + +city = collections.OrderedDict(sorted(city.items())) + +for index, (key, value) in enumerate(city.items()): + print(index, key, value) + ws.write(index, 0, key) + ws.write(index, 1, value) + +wb.save('city.xls') +file.close() diff --git a/darcycool/0016/numbers.txt b/darcycool/0016/numbers.txt new file mode 100644 index 00000000..6b378693 --- /dev/null +++ b/darcycool/0016/numbers.txt @@ -0,0 +1,5 @@ +[ + [1, 82, 65535], + [20, 90, 13], + [26, 809, 1024] +] diff --git a/darcycool/0016/numbers.xls b/darcycool/0016/numbers.xls new file mode 100644 index 00000000..0c199c0f Binary files /dev/null and b/darcycool/0016/numbers.xls differ diff --git a/darcycool/0016/write_into_excel.py b/darcycool/0016/write_into_excel.py new file mode 100644 index 00000000..f16c9971 --- /dev/null +++ b/darcycool/0016/write_into_excel.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# 第 0016 题: 纯文本文件 numbers.txt, 里面的内容(包括方括号),请将上述内容写到 numbers.xls 文件中 +import collections +import json + +import xlwt + +with open('numbers.txt', 'r') as f: + data = json.load(f) + print(data) + +wb = xlwt.Workbook() +ws = wb.add_sheet('number') + +for index, item in enumerate(data): + for j, value in enumerate(item): + print(index, j, value) + ws.write(index, j, value) + +wb.save('numbers.xls') diff --git a/darcycool/0017/excel2xml.py b/darcycool/0017/excel2xml.py new file mode 100644 index 00000000..22387c3d --- /dev/null +++ b/darcycool/0017/excel2xml.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +# 第 0017 题: 将 第 0014 题中的 student.xls 文件中的内容写到 student.xml 文件中 +import json +import xml.etree.cElementTree as ET +from collections import OrderedDict +from xml.dom import minidom + +import xlrd + +root = ET.Element("root") +student = ET.SubElement(root, "students") + +wb = xlrd.open_workbook('student.xls') +sheet = wb.sheet_by_index(0) +number_of_rows = sheet.nrows +number_of_columns = sheet.ncols + +student_dict = OrderedDict() + +for row in range(number_of_rows): + items = [sheet.cell(row, col).value for col in range(1, number_of_columns)] + student_dict[sheet.cell(row, 0).value] = items +print(student_dict) + +json_str = json.dumps(student_dict, ensure_ascii=False, indent=4) +print(json_str) + +student.text = json_str + +tree = ET.ElementTree(root) +tree.write('student.xml', encoding='utf-8', xml_declaration=True) + +xmlstr = minidom.parseString(ET.tostring(root)).toprettyxml() +with open('student1.xml', 'w') as f: + f.write(xmlstr) diff --git a/NKUCodingCat/0017/student.xls b/darcycool/0017/student.xls similarity index 83% rename from NKUCodingCat/0017/student.xls rename to darcycool/0017/student.xls index 8329865c..ea1fc44e 100644 Binary files a/NKUCodingCat/0017/student.xls and b/darcycool/0017/student.xls differ diff --git a/darcycool/0017/student.xml b/darcycool/0017/student.xml new file mode 100644 index 00000000..6bdca54e --- /dev/null +++ b/darcycool/0017/student.xml @@ -0,0 +1,21 @@ + +{ + "1": [ + "张三", + 150.0, + 120.0, + 100.0 + ], + "2": [ + "李四", + 90.0, + 99.0, + 95.0 + ], + "3": [ + "王五", + 60.0, + 66.0, + 68.0 + ] +} \ No newline at end of file diff --git a/darcycool/0017/student1.xml b/darcycool/0017/student1.xml new file mode 100644 index 00000000..2042335a --- /dev/null +++ b/darcycool/0017/student1.xml @@ -0,0 +1,23 @@ + + + { + "1": [ + "张三", + 150.0, + 120.0, + 100.0 + ], + "2": [ + "李四", + 90.0, + 99.0, + 95.0 + ], + "3": [ + "王五", + 60.0, + 66.0, + 68.0 + ] +} + diff --git a/darcycool/0018/city.xls b/darcycool/0018/city.xls new file mode 100644 index 00000000..157d37d6 Binary files /dev/null and b/darcycool/0018/city.xls differ diff --git a/darcycool/0018/city.xml b/darcycool/0018/city.xml new file mode 100644 index 00000000..05b4ac3d --- /dev/null +++ b/darcycool/0018/city.xml @@ -0,0 +1,6 @@ + +{ + "1": "上海", + "2": "北京", + "3": "成都" +} \ No newline at end of file diff --git a/darcycool/0018/excel2xml.py b/darcycool/0018/excel2xml.py new file mode 100644 index 00000000..ae39bb81 --- /dev/null +++ b/darcycool/0018/excel2xml.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +# 第 0018 题: 将 第 0015 题中的 city.xls 文件中的内容写到 city.xml 文件中 +import xlrd +from collections import OrderedDict +import json + +import xml.etree.cElementTree as ET + +wb = xlrd.open_workbook('city.xls') +sheet = wb.sheet_by_index(0) +number_of_row = sheet.nrows +number_of_col = sheet.ncols + +city = OrderedDict() + +for row in range(number_of_row): + city[sheet.cell(row, 0).value] = sheet.cell(row, 1).value + +print(city) +json_str = json.dumps(city, ensure_ascii=False, indent=4) +print(json_str) + +root = ET.Element('root') +cities = ET.SubElement(root, 'citys') + +cities.text = json_str + +tree = ET.ElementTree(root) +tree.write('city.xml', encoding='utf8', xml_declaration=True) diff --git a/darcycool/0019/numbers.xls b/darcycool/0019/numbers.xls new file mode 100644 index 00000000..3e606af7 Binary files /dev/null and b/darcycool/0019/numbers.xls differ diff --git a/darcycool/0019/numbers.xml b/darcycool/0019/numbers.xml new file mode 100644 index 00000000..56a909a0 --- /dev/null +++ b/darcycool/0019/numbers.xml @@ -0,0 +1,2 @@ + +[[1.0, 82.0, 65535.0], [20.0, 90.0, 13.0], [26.0, 809.0, 1024.0]] \ No newline at end of file diff --git a/darcycool/0019/xls2xml.py b/darcycool/0019/xls2xml.py new file mode 100644 index 00000000..d7dc04a5 --- /dev/null +++ b/darcycool/0019/xls2xml.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# 第 0019 题: 将 第 0016 题中的 numbers.xls 文件中的内容写到 numbers.xml 文件中 +import xlrd +import xml.etree.cElementTree as ET + +wb = xlrd.open_workbook('numbers.xls') +sheet = wb.sheet_by_index(0) +number_of_row = sheet.nrows +number_of_col = sheet.ncols + +numbers = [] + +for row in range(number_of_row): + number = [sheet.cell(row, col).value for col in range(number_of_col)] + numbers.append(number) + +print(numbers) +print(isinstance(numbers, list)) +root = ET.Element('root') +numbers_element = ET.SubElement(root, 'numbers') +numbers_element.text = str(numbers) + +tree = ET.ElementTree(root) +tree.write('numbers.xml', xml_declaration=True, encoding='utf-8') diff --git a/darcycool/0021/hashpassword.py b/darcycool/0021/hashpassword.py new file mode 100644 index 00000000..7c5912a8 --- /dev/null +++ b/darcycool/0021/hashpassword.py @@ -0,0 +1,16 @@ +import uuid +from hashlib import sha256 + + +def encrypt_password(password, salt=None): + if salt is None: + salt = uuid.uuid4().hex + + return sha256(salt.encode() + password.encode()).hexdigest() + ':' + salt + + +def check_password(hashed_password, user_password): + password, salt = hashed_password.split(':') + return password == sha256(salt.encode() + user_password.encode()).hexdigest() + +print(encrypt_password('123456', '666'))