downloading文件【downloading文件课程问答】 您所在的位置:网站首页 信用卡bfra是什么意思 downloading文件【downloading文件课程问答】

downloading文件【downloading文件课程问答】

#downloading文件【downloading文件课程问答】| 来源: 网络整理| 查看: 265

编译: Python开发者 - Jake_on 英文:Quorahttp://python.jobbole/85986/

【伯乐在线导读】:有网友在 Quora 上提问,「你用 Python 写过最牛逼的程序/脚本是什么?」。本文摘编了 3 个国外程序员的多个小项目,含代码。

Manoj Memana Jayakumar, 3000+ 顶

更新:凭借这些脚本,我找到了工作!可看我在这个帖子中的回复,《Has anyone got a job through Quora? Or somehow made lots of money through Quora?》

1. 电影/电视剧 字幕一键下载器

我们经常会遇到这样的情景,就是打开字幕网站subscene 或者opensubtitles, 搜索电影或电视剧的名字,然后选择正确的抓取器,下载字幕文件,解压,剪切并粘贴到电影所在的文件夹,并且需把字幕文件重命名以匹配电影文件的名字。是不是觉得太无趣呢?对了,我之前写了一个脚本,用来下载正确的电影或电视剧字幕文件,并且存储到与电影文件所在位置。所有的操作步骤仅需一键就可以完成。懵逼了吗?

请看这个 Youtube 视频:https://youtu.be/Q5YWEqgw9X8

源代码存放在GitHub:subtitle-downloader

更新:目前,该脚本支持多个字幕文件同时下载。步骤:按住 Ctrl ,选择你想要为其下载字幕的多个文件 , 最后执行脚本即可

2. IMDb 查询/电子表格生成器

我是一个电影迷,喜欢看电影。我总是会为该看哪一部电影而困惑,因为我搜集了大量的电影。所以,我应该如何做才能消除这种困惑,选择一部今晚看的电影?没错,就是IMDb。我打开 http://imdb,输入电影的名字,看排名,阅读和评论,找出一部值得看的电影。

但是,我有太多电影了。谁会想要在搜索框输入所有的电影的名字呢? 我肯定不会这样做,尤其是我相信“如果某些东西是重复性的,那么它应该是可以自动化的”。因此,我写了一个 python 脚本, 目的是为了使用 非官方的 IMDb API 来获取数据。我选择一个电影文件(文件夹),点击右键,选择‘发送到’,然后 点击 IMDB.cmd (顺便提一下,IMDB.cmd 这个文件就是我写的 python 脚本),就是这样。

我的浏览器会打开这部电影在IMDb网站上的准确页面。

仅仅只需点击一个按键,就可以完成如上操作。如果你不能够了解这个脚本到底有多酷,以及它可以为你节省多少时间,请看这个 Youtube 视频:https://youtu.be/JANNcimQGyk

从现在开始,你再也不需要打开你的浏览器,等待加载IMDb的页面,键入电影的名字。这个脚本会帮你完成所有的操作。跟往常一样,源代码放在了GitHub:imdb ,并且附有操作说明。当然,由于这个脚本必须去掉文件或文件夹中的无意义的字符,比如“DVDRip, YIFY, BRrip”等,所以在运行脚本的时候会有一定比例的错误。但是经过测试,这个脚本在我几乎所有的电影文件上都运行的很好。

2014-04-01更新:

许多人在问我是否可以写一个脚本,可以发现一个文件夹中所有电影的详细信息,因为每一次只能发现一个电影的详细信息是非常麻烦的。我已经更新了这个脚本,支持处理整个文件夹。脚本会分析这个文件夹里的所有子文件夹,从 IMDb上抓取所有电影的详细信息 ,然后打开一个电子表格,根据IMDb 上的排名,从高到低降序排列所有的电影。这个表格中包含了 (所有电影)在 IMDb URL, 年份,情节,分类,获奖信息,演员信息,以及其他的你可能在 IMBb找到的信息。下面是脚本执行后,生成的表格范例:

Your very own personal IMDb database! What more can a movie buff ask for? ;)Source on GitHub: imdb

你也可以有一个个人 IMDb 数据库!一个电影爱好者还能够要求更多吗?:)

源代码在 GitHub:imdb

3. theoatmeal 连载漫画下载器

我个人超级喜欢 Matthew Inman 的漫画。它们在疯狂搞笑的同时,却又发人深省。但是,我很厌烦重复点击下一个,然后才能阅读每一个漫画。另外,由于每一个漫画都由多福图片组成,所以手动下载这些漫画是非常困难的。

基于如上原因,我写了一个 python 脚本 ,用来从这个站点下载所有的漫画。这个脚本利用 BeautifulSoup (http://crummy/software/B… ) 解析 HTML 数据, 所以在运行脚本前,必须安装 BeautifulSoup。 用于下载燕麦片(马修.英曼的一部漫画作品)的下载器已经上传到GitHub:theoatmeal-downloader 。(漫画)下载完后的文件夹是这样的

4. someecards 下载器

成功地从http://theoatmeal 下载了整部漫画后,我在想是否我可以做同样的事情 , 从另一个我喜欢的站点— 搞笑的,唯一的http://someecards . 下载一些东西呢?

somececards 的问题是,图片命名是完全随机的,所有图片的排放没有特定的顺序,并且一共有52 个大的类别, 每一个类别都有数以千计的图片。

我知道,如果我的脚本是多线程的话,那将是非常完美的,因为有大量的数据需要解析和下载,因此我给每一个类别中的每一页都分配一个线程。这个脚本会从网站的每一个单独的分类下载搞笑的电子贺卡,并且把每一个放到单独的文件夹。现在,我拥有这个星球上最好笑的电子贺卡私人收藏。下载完成后,我的文件夹是这样的:

没错,我的私人收藏总共包括:52个类别,5036个电子贺卡。 源代码在这里:someecards-downloader

编辑:很多人问我是否可以共享我下载的所有文件,(在这里,我要说)由于我的网络不太稳定,我没办法把我的收藏上传到网络硬盘,但是我已经上传一个种子文件,你们可以在这里下载:somecards Site Rip torrent 种下种子,传播爱

Akshit Khurana,4400+ 顶

感谢 500 多个朋友在 Facebook 上为我送出的生日祝福

有三个故事让我的21岁生日变的难忘,这是最后一个故事。我倾向于在每一条祝福下亲自评论,但是使用 python 来做更好。

…1.# Thanking everyone who wished me on my birthday2.importrequests3.importjson4.5.# Aman's post time6.AFTER = 13532337547.TOKEN = ' '8.9.defget_posts():10."""Returns dictionary of id, first names of people who posted on my wall11. between start and end time"""12.query = ("SELECT post_id, actor_id, message FROM stream WHERE "13."filter_key = 'others' AND source_id = me() AND "14."created_time > 1353233754 LIMIT 200")15.16.payload = {'q': query,'access_token': TOKEN}17.r = requests.get('https://graph.facebook/fql',params=payload)18.result = json.loads(r.text)19.returnresult['data']20.21.defcommentall(wallposts):22."""Comments thank you on all posts"""23.#TODO convert to batch request later24.forwallpost inwallposts:25.26.r = requests.get('https://graph.facebook/%s' %27.wallpost['actor_id'])28.url = 'https://graph.facebook/%s/comments' % wallpost['post_id']29.user = json.loads(r.text)30.message = 'Thanks %s :)' % user['first_name']31.payload = {'access_token': TOKEN,'message': message}32.s = requests.post(url,data=payload)33.34.print"Wall post %s done" % wallpost['post_id']35.36.if__name__ == '__main__':37mentall(get_posts())…

为了能够顺利运行脚本,你需要从Graph API Explorer(需适当权限)获得 token。 本脚本假设特定时间戳之后的所有帖子都是生日祝福。

尽管对评论功能做了一点改变,我仍然喜欢每一个帖子。

当我的点赞数,评论数以及评论结构在 ticker(Facebook一项功能,朋友可以看到另一个朋友在做什么,比如点赞,听歌,看电影等) 中爆涨后,我的一个朋友很快发现此事必有蹊跷。

尽管这个不是我最满意的脚本,但是它简单,快捷,有趣。

当我和 Sandesh Agrawal 在网络实验室讨论时,有了写这个脚本的想法。 为此,Sandesh Agrawal 耽搁了实验室作业,深表感谢。

Tanmay Kulshrestha,3300+ 顶

好了,在我失去这个项目之前(一个猪一样的朋友格式化了我的硬盘,我的所有代码都在那个硬盘上)或者说,在我忘记这些代码之前,我决定来回答这个问题。

5、整理照片

当我对图像处理感兴趣之后,我一直致力于研究机器学习。我写这个有趣的脚本,目的是为了分类图片,很像 Facebook 做的那样(当然这是一个不够精确的算法)。 我使用了 OpenCV 的人脸检测算法,“haarcascade_frontalface_default.xml”,它可以从一张照片中检测到人脸。

你可能已经察觉到这张照片的某些地方被错误地识别为人脸。 我试图通过修改一些参数(来修正这一问题),但还是某些地方被错误地识别为人脸,这是由相机的相对距离导致的。我会在下一阶段解决这一问题(训练步骤)。

这个训练算法需要一些训练素材,每个人需要至少需要100-120个训练素材(当然多多益善)。 我太懒了,并没有为每一个人挑选照片,并把它们复制粘帖到训练文件夹。所以,你可能已经猜到,这个脚本会打开一个图片,识别人脸,并显示每一个人脸(脚本会根据处于当前节点的训练素材给每一个人脸预测一个名字)。伴随着每次你标记的照片,Recognizer 会被更新,并且还会包含上一次的训练素材。 在训练过程中,你可以增加新的名字。我使用 python 库 tkinter 做了一个 GUI。 因此,大多数时候,你必须初始化一小部分照片(给照片中的人脸命名),其他的工作都可以交给训练算法。 因此,我训练了 Recognizer ,然后让它(Recognizer)去处理所有的图片。

我使用图片中包含的人的人名来命名图片,(例如: Tanmay&*****&*****)。 因此,我可以遍历整个文件夹,然后可以通过输入人名的方法来搜索图片。

初始状态下,当一个人脸还没有训练素材时(素材库中还没有包括这个人脸的名字),需要询问他/她的名字。

我可以增加一个名字,像这个样子:

当训练了几个素材后,它会像这个样子:

最后一个是针对应对那些垃圾随机方块而使用的变通解决方案。

带名字的最终文件夹。

所以,现在寻找图片变得相当简单。顺便提一下,很抱歉(我)放大了这些照片。

…importcv2importsysimportos,random,string#choices=['Add a name']importoscurrent_directory=os.path.dirname(os.path.abspath(__file__))fromTkinterimportTkfromeasygui import *importnumpy asnpx= os.listdir(current_directory)new_x=[]testing=[]foriinx:ifi.find('.')==-1:new_x+=[i]else:testing+=[i]x=new_xg=xchoices=['Add a name']+xy= range(1,len(x)+1)defget_images_and_labels():globalcurrent_directory,x,y,gifx==[]:return(False,False)image_paths=[]foriing:path=current_directory+''+iforfilename inos.listdir(path):final_path=path+''+filenameimage_paths+=[final_path]# images will contains face imagesimages = []# labels will contains the label that is assigned to the imagelabels = []forimage_path inimage_paths:# Read the image and convert to grayscaleimg = cv2.imread(image_path,0)# Convert the image format into numpy arrayimage = np.array(img,'uint8')# Get the label of the imagebackslash=image_path.rindex('')underscore=image_path.index('_',backslash)nbr = image_path[backslash+1:underscore]t=g.index(nbr)nbr=y[t]# If face is detected, append the face to images and the label to labelsimages.append(image)labels.append(nbr)#cv2.imshow("Adding faces to traning set...", image)#cv2.waitKey(50)# return the images list and labels listreturnimages,labels# Perform the traniningdeftrain_recognizer():recognizer = cv2.createLBPHFaceRecognizer()images,labels = get_images_and_labels()ifimages==False:returnFalsecv2.destroyAllWindows()recognizer.train(images,np.array(labels))returnrecognizerdefget_name(image_path,recognizer):globalx,choices#if recognizer=='':# recognizer=train_recognizer()cascadePath = "haarcascade_frontalface_default.xml"faceCascade = cv2.CascadeClassifier(cascadePath)#recognizer=train_recognizer()x1=testingglobalgprintimage_pathimage = cv2.imread(image_path)img = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)predict_image = np.array(img,'uint8')faces = faceCascade.detectMultiScale(img,scaleFactor=1.3,minNeighbors=5,minSize=(30,30),flags = http://cv2.cv.CV_HAAR_SCALE_IMAGE)for(x,y,w,h)infaces:f= image[y:y+w,x:x+h]cv2.imwrite('temp.jpg',f)im='temp.jpg'nbr_predicted,conf = recognizer.predict(predict_image[y: y + h,x: x + w])predicted_name=g[nbr_predicted-1]print"{} is Correctly Recognized with confidence {}".format(predicted_name,conf)ifconf>=140:continuemsg='Is this '+predicted_namereply = buttonbox(msg,image=im,choices=['Yes','No'])ifreply=='Yes':reply=predicted_namedirectory=current_directory+''+replyifnotos.path.exists(directory):os.makedirs(directory)random_name=''.join(random.choice(string.ascii_uppercase + string.digits)for_inrange(7))path=directory+''+random_name+'.jpg'cv2.imwrite(path,f)else:msg = "Who is this?"reply = buttonbox(msg,image=im,choices=choices)ifreply == 'Add a name':name=enterbox(msg='Enter the name',title='Training',strip=True)printnamechoices+=[name]reply=namedirectory=current_directory+''+replyifnotos.path.exists(directory):os.makedirs(directory)random_name=''.join(random.choice(string.ascii_uppercase + string.digits)for_inrange(7))path=directory+''+random_name+'.jpg'printpathcv2.imwrite(path,f)# calculate window positionroot = Tk()pos = int(root.winfo_screenwidth() * 0.5),int(root.winfo_screenheight() * 0.2)root.withdraw()WindowPosition = "+%d+%d" % pos# patch rootWindowPositionrootWindowPosition = WindowPositiondefdetect_faces(img):globalchoices,current_directoryimagePath = imgfaceCascade = cv2.CascadeClassifier(cascPath)image = cv2.imread(imagePath)gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)faces = faceCascade.detectMultiScale(gray,scaleFactor=1.3,minNeighbors=5,minSize=(30,30),flags = http://cv2.cv.CV_HAAR_SCALE_IMAGE)print"Found {0} faces!".format(len(faces))m=0for(x,y,w,h)infaces:m...



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有