Linux下的amule并不会对链接做编码转换,也就是说,比如下面这样的链接地址:
ed2k://|file|%E7%94%9F%E6%B4%BB%E5%A4%A7%E7%88%86%E7%82%B8.The.Big.Bang.Theory.S02E15.Chi_Eng.HR-HDTV.AC3.960X528.x264-YYeTs%E4%BA%BA%E4%BA%BA%E5%BD%B1%E8%A7%86.avi|230043648|e49a10d7052b5dfee4aa8b3336b76301|h=qkhaltxhuygwphznp2holcvdarxki3e6|/
直接交给amule下载时,给出的文件名就会变成下面这个样子:
çæ´»å¤§çç¸.The.Big.Bang.Theory.S02E04.Chi_Eng.HR-HDTV.AC3.960X528.x264-YYeTs人人影è§.avi
阅读全文…
http://www.adrive.com/public/3c6cddabe023b34b32684fbc2bc4942eecbc7382db35d8fc62d64a6cdd16ba76.html
http://www.adrive.com/public/688ac9412399642b3484ae96bd379e8da1c4f3e838f3fda0b3e9de50742bb946.html
别问这是什么,下载了,你就知道了。
我电脑上的google chrome browser是从官方下载的,使用上到时没有问题,而且chrome browser也设置为我的默认浏览器,这一设置,引发了一个问题,在使用evince浏览单pdf文件的时候,如果点击文档中的链接,会给出一个permission denied的错误,截图如下:

依然是Apparmor搞的鬼。解决的办法如下:
阅读全文…
Ubuntu下有一个fdupes程序可以用来打印当前目录下有多少文件是重复的。因为是二进制程序,所以效率上更高。
而用Python实现的,效率就很低了,同样的目录,fdupes只用了2秒的样子,而Python程序就用了15s,大约7-8倍速度差距。
所以这个代码仅仅只是一个演示罢了。代码参考《Python for Unix and Linux System Administration》一书。
这一章主要是网络客户端编程,讨论了包括SMTP,POP3,FTP,URL在内的一些编程技术。Python针对网络编程有一个非常强大的模块,那就是Twisted,这个工具太强大,以至于有专门的书籍来讲述如何使用。
后面的习题大部分都是写一些代码片段,比如获取一个页面,连接一个FTP服务器,连接你的邮箱。
我选取了修改这张描述的网页抓取代码修改作为练习。主要是做了两个工作:
1)用新的一些模块替换即将过期的模块,比如HTMLParser
2)加入了多线程功能,使得当网站很大的时候,下载速度加快了很多。
不过加入这个多线程后,暂时有一个问题我不能解决。就是如何保证线程是在所有的页面都下载完后才全退出。
目前的做法是一个无线循环,除非你杀死,否则不会退出。
另外,对于图片等资源目前还无法处理,我打算专门写一个脚本来镜像某一个网站的图片资源,嘿嘿,用处嘛,你懂的。
因为这一章是图形化编程,第一版和第二版都只是简单的描述了一下Tkinter如何使用。其他模块,比如PyGtk,WxPython更加是一笔带过了,所以要完成后面的习题,还得自己找一些资料看。
关于Tkinter的资料,国内不过,基本上还是官方文档为主,Python官方站点给出了一个关于Tkinter的专题,集中了一些资料,感兴趣的可以看看。
阅读全文…
18-4. 线程和文件。把练习 9-19 的答案做一些改进。我们要得到一个字节值,一个文件名然后显示在文件中那个字节出现了多少次。假设这个文件非常的大。文件是可以有多个
读者的,那我们就可以创建多个线程,每个线程负责文件的一部分。最后,把所有的线程的结果相加。使用 timeit()对单线程和多线程分别进行计时,对性能的改进进行讨论。
18-5. 线程,文件和正则表达式。你有一个非常大的 mailbox 文件——如果没有的话,你可以把你所有的 e-mail 的原始信息放到一个文本文件中。你现在要做的是,使用你在 15 章写的识别 e-mail 地址和网页 URL 的正则表达式,分析出这个大文件里的所有的 e-mail 地址和 URL,把这些链接写到一个.html(或.htm)文件中。在这个文件生成时,会自动显示一个浏览器,打开这个文件,显示所有的链接。使用多线程来分隔处理大文件和把结果写到一个新的.html 文件的操作。在浏览器中测试一下你的结果,确保那些链接都能正常工作。
阅读全文…
9–1.文件过滤. 显示一个文件的所有行, 忽略以井号( # )开头的行. 这个字符被用做Python , Perl, Tcl, 等大多脚本文件的注释符号.
附加题: 处理不是第一个字符开头的注释.
去掉以#开头的行比较好办,用startswith函数也行,用string[0]获得第一个字符也行。
麻烦的是如果要去掉行中间的注释,我这里采取用的是正规表达式(RE)方法,代码如下:
import re
def ex9_1(filename):
'''
过滤以#字符作为注释的行,输出过滤后的文本
'''
#首先过滤掉#开头的行
data = [ line for line in open(filename) if line[0] != '#']
#过滤从#开始一直到行尾的字符
p = re.compile(r'#.*$')
result = [ p.sub('',line) for line in data ]
print ''.join(result)
阅读全文…
近期评论