FTP下载程序(包括ascii和binary)
dcy
posted @ 2009年8月23日 23:57
in Python
with tags
python 小玩意
, 4631 阅读
一条python写的程序,可以在ftp上下载东西,包括ascii模式和binary模式。
先讲讲ascii和binary:
一般来说:
如果你用错误的模式传输你的图片,你将会无法看到图片,看到的会是乱码。
如果你用错误模式上传CGI脚本,那么就将无法运行你的脚本,会看到类似Server 500 Error的出错信息。
所以你必须使用正确的模式,图片和执行文件必须用BINARY模式,CGI脚本和普通HTML文件用ASCII模式上传.
ASCII和BINARY模式区别:
用HTML 和文本编写的文件必须用ASCII模式上传,用BINARY模式上传会破坏文件,导致文件执行出错。
BINARY模式用来传送可执行文件,压缩文件,和图片文件。
如果你用ASCII模式传,会显示一堆乱码,你必须重新用BINARY模式传。
对于第二种情况,是因为有很多ftp服务器和客户端软件能自动识别文件类型,并采取相应的传输方式。ftp是应用层协议,和具体操作系统无关 .
ASCII模式和BINARY模式的区别是回车换行的处理,binary模式不对数据进行任何处理,asci模式将回车换行转换为本机的回车字符,比如Unix下是\n,Windows下是\r\n,Mac下是\r
截图:
代码:
-
#!/usr/bin/env python
-
-
from ftplib import FTP
-
-
-
-
def ascii(site, route, filename):
-
def writeline(data):
-
fd.write(data + "\n")
-
f = FTP(site)
-
f.login()
-
f.cwd(route)
-
fd = open(filename, 'wt')
-
f.retrlines('RETR %s' % filename, writeline)
-
print "Done"
-
fd.close()
-
f.quit()
-
-
def binary(site, route, filename):
-
f = FTP(site)
-
f.login()
-
f.cwd(route)
-
fd = open(filename, 'wb')
-
f.retrbinary('RETR %s' % filename, fd.write)
-
print "Done"
-
fd.close()
-
f.quit()
-
-
method = raw_input("Enter the method, ascii or binary: ")
-
site = raw_input("Enter the site(ftp.kernel.org): ")
-
route = raw_input("Enter the route(/pub/linux/kernel): ")
-
filename = raw_input("Enter the filename(README; patch8.gz): ")
-
-
if method == 'ascii':
-
ascii(site, route, filename)
-
else:
-
binary(site, route, filename)
-
2009年9月17日 06:14
观光之……
其实多数编辑器都能良好识别各种换行符,比如vim默认对\r\n结尾的会在每行后加一个^M的标记~~
但是最白痴的是windows的记事本,对\n结尾的直接不换行,给个黑方块
2022年12月14日 23:24
Currently in bash, the -n operator will return true if the variable is empty. However, if the variable is empty, it should return false. This is because when a variable is double quoted, it is home buyers Welder treated as a string, and an empty string is still a string. Adding quotation marks around the variable will ensure that it is treated as a string, regardless of whether or not it is empty.