随着一个《霍格沃茨:一段校史》风格的大字(呃,这字好像并不大……)标题的出现,无聊的我没事干,又开始整活了~ 之前我做的程序,一个使用了Tkinter库,一个则是Pygame,总之都是带有图形化的界面的。但作为一个懒汉,我自然能懒必懒(这点我非常有自知之明),这次,我就来一个简单朴素的没有图形界面的程序。 这是一个闹钟,一个可以设定时间的闹钟(虽然操作的界面有点简陋,但丝毫不影响它的强大功能)。 首先,我们要编闹钟的响铃程序。 我们先新建一个文件,后缀是“.pyw”(这样可以保证程序运行的时候不会弹出一个Python自带的窗口)。 首先,老规矩,第一行一定是: 然后,我们要导入所需的模块:- import datetime
- import pygame
- import os
- import time
- import random
- from pynput.keyboard import Key,Listener
复制代码 本次所需的模块不多,由于都是我原先安装好的,所以我也并不确定它们是否要用pip安装。当然,使用PyCharm进行编程可以自动为你安装你使用到的未安装的模块。- all_songs=[]
- all_songs_dict={}
- for root, dirs, names in os.walk("d:/Users/{}/Music".format(os.getlogin())):
- for filename in names:
- if os.path.join(root, filename)[-4:] == ".mp3" or os.path.join(root, filename)[-4:] == ".ogg":
- all_songs.append(os.path.join(root, filename)[os.path.join(root, filename).find("\") + 1:-4])
- all_songs_dict[
- os.path.join(root, filename)[os.path.join(root, filename).find("\") + 1:-4]] = os.path.join(root,
- filename).replace(
- "\", "/")
复制代码 首先,我们需要获取电脑中的音乐。我们用os.walk获取Music文件夹中的所有ogg和mp3文件(这是由于我播放音乐使用的是Pygame,它似乎只支持这两种文件的音乐)。同时,通过对路径字符串的文字处理,提取出音乐名称存储入列表all_songs,并将其和原先的路径对应存入字典all_songs_dict。这时存入这两个变量中的音乐信息相当于一种保险机制,可以确保在找不到铃声文件时有备用铃声可以使用(当然,如果你的音乐文件夹是空的,这当然没用;但我不认为你的文件夹中会没有音乐)。- finding = open("alarm_list.txt", "a")
- finding.close()
- finding = open("alarm_list.txt", "r")
- alarm_list_undone = finding.readlines()
- finding.close()
- alarm_list = []
- for i in alarm_list_undone:
- alarm_list.append(i.replace("\n", ""))
复制代码 我们的闹钟时间当然需要存储在某个文件中,这样才能防止这个信息丢失。于是,我们打开了一个“alarm_list.txt”文件(为防止文件不存在,我们需要先用写入的模式打开一次文件,这样可以在文件不存在时创建;同时为防止这个操作清空文件,我们必须用追加写的“a”而不是“w”)。我们会读取文件中的内容,并删除换行后存入alarm_list。我们不必忧心文件中有无法识别的内容,因为文件是通过另一个编辑程序写入的,那个程序会保证文件内容是这个程序所能识别的。- finding = open("dates_one.txt", "a")
- finding.close()
- finding = open("dates_one.txt", "r")
- dates_undone_one = finding.readlines()
- finding.close()
- finding = open("dates_two.txt", "a")
- finding.close()
- finding = open("dates_two.txt", "r")
- dates_undone_two = finding.readlines()
- finding.close()
- dates = {}
- for i in range(len(dates_undone_one)):
- dates[dates_undone_one[i].replace("\n", "")] =eval( dates_undone_two[i].replace("\n", ""))
复制代码 同理,对“dates_one.txt”和“dates_two.txt”也需要类似的处理。当然,因为文件中存储有表格,我们有必要用eval()函数回复它的表格类型。第二个不同在于这两个文件的内容会被存入一个字典,而不是表格。- finding = open("songs_one.txt", "a")
- finding.close()
- finding = open("songs_one.txt", "r")
- songs_undone_one = finding.readlines()
- finding.close()
- finding = open("songs_two.txt", "a")
- finding.close()
- finding = open("songs_two.txt", "r")
- songs_undone_two = finding.readlines()
- finding.close()
- songs = {}
- for i in range(len(songs_undone_two)):
- try:
- open(songs_undone_two[i].replace("\n", ""),"r")
- except:
- songs_undone_two[i]=all_songs_dict[all_songs[random.randint(0,len(all_songs)-1)]]+"\n"
- with open("songs_two.txt", "w")as finding:
- finding.writelines(songs_undone_two)
- for i in range(len(songs_undone_one)):
- songs[songs_undone_one[i].replace("\n", "")] = songs_undone_two[i].replace("\n", "")
复制代码 在对“songs_one.txt”和“songs_two.txt”的处理中,我们就需要用到表格all_songs了。为保证音乐都存在,它会尝试打开路径所指向的文件。如果找不到文件,它会将音乐修改为all_songs中所记录的随机一个音乐(在这里可以进行改善:加一个if判断,如果路径指向的文件后缀不是“.mp3”或“.ogg”,则也要修改音乐。这个工作感兴趣的读者可以自行加上,在此我不再给出代码——这主要是由于我在解释我的程序代码时即使发现了不合理之处,只要不是大问题,就也不愿再行修改的习惯)。- finding = open("alarm_list.txt", "r")
- finder=finding.read()
- try:
- while finder[-1] == "\n":
- finder = finder[:-1]
- except:
- while False:
- print()
- with open("alarm_list.txt", "w") as finding:
- finding.write(finder)
- finding = open("dates_one.txt", "r")
- finder=finding.read()
- try:
- while finder[-1] == "\n":
- finder = finder[:-1]
- except:
- while False:
- print()
- with open("dates_one.txt", "w") as finding:
- finding.write(finder)
- finding = open("dates_two.txt", "r")
- finder=finding.read()
- try:
- while finder[-1] == "\n":
- finder = finder[:-1]
- except:
- while False:
- print()
- with open("dates_two.txt", "w") as finding:
- finding.write(finder)
- finding = open("songs_one.txt", "r")
- finder=finding.read()
- try:
- while finder[-1] == "\n":
- finder = finder[:-1]
- except:
- while False:
- print()
- with open("songs_one.txt", "w") as finding:
- finding.write(finder)
- finding = open("songs_two.txt", "r")
- finder=finding.read()
- try:
- while finder[-1] == "\n":
- finder = finder[:-1]
- except:
- while False:
- print()
- with open("songs_two.txt", "w") as finding:
- finding.write(finder)
复制代码 未完待续...
|