年纪大了,头脑确实不够用。学习实践类不少天,终于觉悟。
1、StringIO 对象切记多多seek(0),否则经常出现结果是空,打乱原来思路。
2、FTP STOR retrbinary等方法,操作的对象是文件对象实例,而非字符串文档,需要使用文件/类文件StingIO/BytesIO file-like object的文件类型操作方法,如read,write等。lxml的parse方法同样接收的是文件对象。
3、看了gzip模块源码,构造函数GzipFile()参数filename和fileobj必须要有1个。类方法实际操作的是fileobj,当fileobj参数为None时,初始化filename对应的文件对象生成fileobj;当filename为空时,GZIP文件名默认为‘’空,而不写入文件名。当两者都非空时,操作fileobj,其GZIP文件名为filename。
4、实践发现,FTP上传函数storbinary(“STOR /plr/222.xml.gz”, fileobj),fileobj没有对应GZIP filename时,上传到服务器的文件解压文件名自动变为222.xml。fileobj存在filename时,以实际filename.
def ftpstream():
# download or upload ftp file by stringio,no disk file
#gzip.GzipFile(filename=None, mode=None, compresslevel=9, fileobj=None, mtime=None)
from ftplib import FTP
import gzip
import cStringIO
import zipfile
import Strin