fun88官网输出以及其它,纯JavaScript实现的分页插件实例

Python实现FTP传输

文件传输过程中经常需要使用FTP服务器进行中转。Python集成了ftp模块,可以比较方便的实现一个ftp客户端。本文主要实现了递归上传或下载,
文件和文件夹。isExist可以判断ftp服务器上是否存在某一路径,如果存在,可以进一步判定出它是文件还是文件夹。

__mail__ = '[email protected]'
__date__ = '2014-04-23'
__version = 1.2


import sys
import os
import time
from ftplib import *


_XFER_FILE = 'FILE'
_XFER_DIR = 'DIR'
_XFER_NONE = "NONE"


class Xfer(object):
    '''
    @note: upload local file or dirs recursively to ftp server
    '''
    def __init__(self):
        self.ftp = None

    def __del__(self):
        pass

    def setFtpParams(self, ip, uname, pwd, port = 21, timeout = 60):        
        self.ip = ip
        self.uname = uname
        self.pwd = pwd
        self.port = port
        self.timeout = timeout

    def initEnv(self):
        if self.ftp is None:
            self.ftp = FTP()
            print '### connect ftp server: %s ...'%self.ip
            if sys.version_info < (2,7,0):
                self.ftp.connect(self.ip, self.port)
            else:
                self.ftp.connect(self.ip, self.port, self.timeout)
            self.ftp.login(self.uname, self.pwd) 
            print self.ftp.getwelcome()

    def clearEnv(self):
        if self.ftp:
            self.ftp.close()
            print '### disconnect ftp server: %s!'%self.ip 
            self.ftp = None

    def isExist(self, remotepath):
        '''
        if remoetepath exists, 
            return TRUE and the type of remotepath, FILE or DIR
        else 
            return (FALSE, NONE)
        '''
        def parse(line):
            pass

        bExist = False
        if self.ftp:
            try:
                self.ftp.dir(remotepath, parse)
                bExist = True
            except:
                pass     

        if bExist:
            res = self.ftp.nlst(remotepath)
            if len(res) == 0 or len(res) > 1 or len(res[0]) > len(remotepath):
                return True, _XFER_DIR
            return True, _XFER_FILE               

        return False, _XFER_NONE

    def uploadFile(self, localpath, remotepath=None):
        '''
        @note: assume localpath is 'c:\log.txt' and remotepath is '/xx/log.txt',
               then  /xx dir must exists
        '''
        if not os.path.isfile(localpath):  
            sys.stderr.write("--- %r doesn't exist"%localpath)
            return        

        if remotepath:
            index = remotepath.rfind('\\')
            if index == -1:
                index = remotepath.rfind('/')

            if index != -1:
                basedir = remotepath[:index]
                bExist, sType = self.isExist(basedir)
                if not bExist or sType != _XFER_DIR:
                    sys.stderr.write("--- %r doesn't exist"%basedir)
                    return

        curdir = ""
        if not remotepath.startswith("/"):            
            curdir = self.ftp.pwd()
            if not curdir.endswith("/"):
                curdir += '/'

        print '+++ upload %s to %s:%s%s'%(localpath, self.ip, curdir, remotepath)
        self.ftp.storbinary('STOR ' + remotepath, open(localpath, 'rb'))

    def uploadDir(self, localdir='./', remotedir='./'):
        if not os.path.isdir(localdir):  
            sys.stderr.write("--- %r doesn't exist"%localdir)
            return
        if not remotedir.endswith('/'):
            remotedir += '/'

        #if remotedir doesn't exist, create one
        try:
            def parse(line):
                pass
            self.ftp.dir(remotedir, parse)
        except:
            self.ftp.mkd(remotedir)

        curdir = self.ftp.pwd()

        self.ftp.cwd(remotedir) 
        for file in os.listdir(localdir):
            src = os.path.join(localdir, file)
            if os.path.isfile(src):
                self.uploadFile(src, file)

            elif os.path.isdir(src):
                bExist, sType = self.isExist(file)
                if not bExist:                    
                    self.ftp.mkd(file)  
                elif sType != _XFER_DIR:
                    sys.stderr.write('--- file %r exists, not a directory'%file)
                    continue
                self.uploadDir(src, remotedir+file)

        self.ftp.cwd(curdir)

    def downloadFile(self, remotepath, localDir):
        curdir = self.ftp.pwd()
        if not curdir.endswith('/'):
            curdir += '/'
        if not remotepath.startswith("/"):            
            remotepath = curdir + remotepath

        bExist, sType = self.isExist(remotepath)
        if not bExist:
            sys.stderr.write("--- %r:%r doesn't exist"%(self.ip, remotepath))
            return

        if sType != _XFER_FILE:
            sys.stderr.write("--- %r:%r is not a file"%(self.ip, remotepath))
            return

        if not os.path.isdir(localDir):
            sys.stderr.write("--- %r doesn't exist"%localDir)
            return

        if not localDir.endswith("/") and not localDir.endswith("\\"):            
            localDir = localDir + '/'            

        temp = remotepath.split("/")
        filename = temp[len(temp)-1]
        dst = localDir + filename

        remotedir = remotepath[:remotepath.rfind(filename)]

        self.ftp.cwd(remotedir)

        f = open(dst,"wb")
        print "+++ download %r:%r to %s"%(self.ip, remotepath, dst)
        self.ftp.retrbinary("RETR %s"%filename, f.write)
        f.close()

        self.ftp.cwd(curdir)

        return True 

    def downloadDir(self, remoteDir, localDir):
        if not os.path.isdir(localDir):
            os.mkdir(localDir)
        if not localDir.endswith("/") and not localDir.endswith("\\"):            
            localDir = localDir + '/'

        bExist, sType = self.isExist(remoteDir)
        if not bExist:
            sys.stderr.write("--- %r:%r doesn't exist"%(self.ip, remoteDir))
            return

        if sType != _XFER_DIR:
            sys.stderr.write("--- %r:%r is not a dir"%(self.ip, remoteDir))
            return

        curdir = self.ftp.pwd()
        if not curdir.endswith('/'):
            curdir += '/'
        if not remoteDir.startswith("/"):            
            remoteDir = curdir + remoteDir
        if not remoteDir.endswith("/"):            
            remoteDir = remoteDir + '/'

        for file in self.ftp.nlst(remoteDir):
            bExist, sType = self.isExist(file)
            if not bExist:
                sys.stderr.write("--- %r:%r doesn't exist"%(self.ip, file))
                return

            if sType == _XFER_DIR:
                temp = file.split("/")
                filename = temp[len(temp)-1]

                self.downloadDir(file, localDir+filename)
                continue

            self.downloadFile(file, localDir)



if __name__ == '__main__':        
    xfer = Xfer()
    xfer.setFtpParams('127.0.0.1', 'root', 'root')

    xfer.initEnv()

    print xfer.isExist("/")

    xfer.uploadFile("clsLoader.py", '/xx/clsLoader.py')
    xfer.uploadDir('urllibTst', '/yy/zz')

    xfer.downloadFile('yy/tst1.py', 'D:/')
    print xfer.downloadDir("yy", "d:\\xxxx\\zz")
    xfer.clearEnv()

文件传输过程中经常需要使用FTP服务器进行中转。Python集成了ftp模块,可以比较方便的实现一个ftp客户端。本文主要实现了…

纯JavaScript实现的分页插件实例,javascript分页

本文实例讲述了纯JavaScript实现的分页插件。分享给大家供大家参考。具体如下:

//总条数(必填)
var Num=Number(<?php echo $count;?>)
//当前页(必填)
var index = Number(<?php echo $page;?>);
/* //每页的条数(可选,默认每页10条) */
var pageNum=Number(10); 
/* //最大显示的页码的数目(可选,默认显示5个页码,页码数目必须大于等于1) */
var maxPageNum=Number(5);
//以下可忽略
//计算得出总页数
var count = (Num%pageNum)>0?(Num/pageNum+1):(Num/pageNum);
count=Math.floor(count);//取整转化为数据类型
//显示的最小页码,
var first=1;
//显示的最大页码,首先last<=count;其次last是小于等于count的最大数//last=index+maxPageNum/2;
var last =1;
var decrease=Math.floor(maxPageNum/2);//当前页向上增加值
var increase=Math.floor(maxPageNum/2);//当前页向下减少值
if(maxPageNum>=1){
 if(maxPageNum==1){//最多显示一页时
  first=index<=count?index:count; 
  last=index<=count?index:count;  
 }else{
   //first要大于零
   first=(index-decrease);
   while(first<=0){
    first++;
   } 
   //first判断显示的最后一页
   if((count-index)<=decrease){
    var diff=count-first;
    while(diff<maxPageNum-1){
     if(first==1){
      break;
     }else{
      --first;
      diff=count-first;
     }
    }
   }
   //last要小于count
   last=(index+increase);
   while(last>=1){
    if(last<=count){
     break;
    }
    last--;
   } 
   //last//判断显示的最后一页与maxPageNum的关系
   last=last>=maxPageNum?last:(maxPageNum>count?count:maxPageNum);
 }
}else{
 alert("至少需要显示一个页码!");
}
var prev = index - 1;//上一页
var next = index+ 1;//下一页 
var str = "<tr>";
if(count==0){
 str += "<td>共<a href='#'>0</a>页</td><td>";
}else if(index>count||index<=0){
 str="<td style='color:blue;' >页码超出范围</td>";
}else if (count > 0) {
 str += "<td>";
 if(first>1){
  str += "  ...  ";
 }
 var i=1;
 for(i=first;i<=last; i++){
  if(i==index){
   str += "  <a href='#' style='color:#4169E1;' onclick='submit(" + i + ");'>[" + i+ "]</a>  ";
  }else{
   str += "  <a href='#' onclick='submit(" + i + ");'>" + i+ "</a>  ";
  }
 } 
  if(last<count){
   str += "  ...  "; 
  }
  str+="</td><td style='font-size: 14px;'>共<a href='#first' style='color:#4169E1;font-size: 16px;' >"+ Num +"</a>条</td>";
  /* if(index!=1){
   str +="<td style='width:60px;font-family: 微软雅黑;font-size: 14px;' ><a href='#' id='prev' onclick='submit(" + prev+ ");'>上一页</a></td>"; 
  }
  if(index<count){
   str +="<td style='width:60px;font-family: 微软雅黑;font-size: 14px;'><a href='#' id='next' onclick='submit("+ next + ");'>下一页</a></td>";
  }*/
  if(index!=1&&count>1){
   str += "<td style='width:40px;font-family: 微软雅黑;font-size: 14px;white-space: nowrap;'>  <a href='#' id='first' name='first' onclick='submit(1);'>首页</a>  </td>";
  }
  if(index!=count&&count>1&&index<count){
   str += "<td style='width:40px;font-family: 微软雅黑;font-size: 14px;white-space: nowrap;'>  <a href='#' onclick='submit(" + count+ ");'>尾页</a>  </td>" ;
  } 
   str+="</tr>";
}
//分页区域填写
$('.page').html(str);
<table class="page">
<tr><td>此处分页只需要传递给我当前页码和总页数即可</td></tr>
</table>
//根据页码查询,
function submit(pageIndex) {
 //var sortInfo = $.getUrlParam('sortInfo');//判断是哪一个页面的查询
 var url = "<?php echo current_url();?>?page="+pageIndex+"&field=<?php echo$field;?>&value=<?php echo $field_value;?>";
 window.location.href=url;
}

希望本文所述对大家的javascript程序设计有所帮助。

本文实例讲述了纯JavaScript实现的分页插件。分享给大家供大家参考。具体如下:
//总条数(必…

一起学Shell之(二)输出以及其它

echo 与printf I/0重定向等

 

 

语   法:echo [-ne][字符串]或 echo [–help][–version]

补充说明:echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开,
并在最后加上换行号。

参   数:-n 不要在最后自动换行

           -e
若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:

\a 发出警告声;

\b 删除前一个字符;

\c 最后不加上换行符号;

\f 换行但光标仍旧停留在原来的位置;

\n 换行且光标移至行首;

\r 光标移至行首,但不换行;

\t 插入tab;

\v 与\f相同;

\\ 插入\字符;

\nnn 插入nnn(八进制)所代表的ASCII字符;

–help 显示帮助

–version 显示版本信息

 

死记硬背不是个办法,我们也不可能记得这么多参数,最好的办法就是请求帮助,man
echo echo
-help再不行百度。echo的具体作用在于输入信息,如提示用户到哪里了,提示用户该输入什么信息了。这个比较适合加\a参数,响一下来让用户知道该做什么该作,但更多的脚本最好少一些交互吧。\n换行,我想输出信息也是为了美观吧。或者提示用户信息到哪了,要出错在之前或之后。

 

printfr wt

说明:甚本复制了C程序库里的printf()库程序的功能,所以基本可以通用。与echo不同的是它不提供换行操作。

 

%s 用于字符串的输出

如:


[[email protected]
test]# cat printf

printf “hello 123 ‘%s,%s'” Love 51cto

[[email protected]
test]# ./printf

hello 123
‘Love,51cto'[[email protected]
test]#


并没有提供换行符,所以输出的信息连在一起了。这个%s的作用我的理解是用作多个同种格式下文本的定义还不错,这样会省于很多代码,和省下很多心。


[[email protected]
test]# cat printf

i=’%s,%s!’

printf “$i” ni hao zhongguo

printf “$i” ni hao cwtea

printf “$i” love you

[[email protected]
test]# ./printf

ni,hao!zhongguo,!ni,hao!cwtea,!love,you![[email protected]
test]#


 

基本的I/O重定向

 

概念:程序应该有数据的来源端和目地端,以及报告问题的地方,称之为标准输入,标准输出,标准错误输出、

 

输入输出可以是任何文件终端硬件等,而以Linux一切皆文件,那么就是任何文件喽。

 

例:


[[email protected]
test]# cat

11234  #手工输入的

11234  #cat输出的

[[email protected]
test]#


 

重定向符号:

< > >>

< 的作用是调取后面的文件然后用<前进行操作。

例:


[[email protected]
test]# cat ts

#! /bin/sh

hello 51CTO

[[email protected]
test]# tr -d “hello” < ts

#! /bin/s

 51CTO

[[email protected]
test]#


 

>
的作用就是把前面的内容输出到后面的文件中,如果目的地不存在,那么创建,已存在那么替换掉原数据。


[[email protected]
test]# cat ts

#! /bin/sh

hello 51CTO

[[email protected]
test]# cat ts >123

[[email protected]
test]# ls

123  printf  ts

[[email protected]
test]# cat 123

#! /bin/sh

hello 51CTO

[[email protected]
test]#


 

>>是添加文件到末尾,这个对配置文件很有效啊。

如:


[[email protected]
test]# tr -d “hello” <ts >>123

[[email protected]
test]# ls

123  printf  ts

[[email protected]
test]# cat 123

#! /bin/sh

hello 51CTO

#! /bin/s

 51CTO

[[email protected]
test]#


:这个过度多加了一行,先是取ts里面的值并执行tr -d
“hello”并输出到123的末端。由于是一路操作下来的,那么123和ts文件就不cat了。tr命令,请tr
-help或百度查。tr的作用,更改文件,特别是配置文件特别不错,注意的是在有管道时,我们应该体现数据效率,尽可能的把少的数据移交给后面的管道。

 

特珠文件:/dev/null与/dev/tty

/dev/null这个大家最常见,特别是任务计划中。

/dev/null
位桶,把数据写入此文件,系统将认为数据已完成写入操作,并把数据给丢掉。

/dev/tty:打开此文件,系统就重定向到另一个终端与程序相结合。

 

/dev/null
这个用的比较广,比如任务计划每五分钟执行一次程序,那么产生的信息太多,而我们又不需要,这时可以

 

直接给它写到位桶里面。

/dev/tty
这个个人认为在安全方面不错,当A要输入密码时可以切换到另一终端,让另一终端来输入密码然后确认后返

 

回。原Shell.


[[email protected]
test]# cat tty

echo “Input Pass1:”  

stty -echo
#关闭echo

read pass </dev/tty #接怍数据从/dev/tty新终端

echo pass2 “Input Enter”

read pass2 </dev/tty

stty echo

[[email protected]
test]# ./tty

Input Pass1:

pass2 Input Enter

[[email protected]
test]#


 

Shell每次登陆都要读取.profile文件,后面的版本好像是在根目录的.bash_profile


[[email protected]
~]# cat .bash_profile

# .bash_profile

 

# Get the aliases and functions

if [ -f ~/.bashrc ]; then

        . ~/.bashrc

fi

 

# User specific environment and startup programs

 

PATH=$PATH:$HOME/bin   #

 

export PATH

unset USERNAME

[[email protected]
~]#


如果你要定义shell找你自己定义的目录的话,或者也可以在开头的第一行加上#!/你的目录话加


PATH=:/bin    先找这目录

PATH=/bin     中间找这目录

PATH=/bin:
最后找这个目录


所以位置的排例是以:号为基准。

 

简单的执行跟踪:

set -x 

set +x

这个作用蛮大的,还有一个test也蛮强的,但我喜欢set -x
,在执行程序每一行都会提示Shell进行的什么

 

操作,已经操作完的内容。


[[email protected]
test]# ./tty

++ echo ‘Input Pass1:’

Input Pass1:

++ stty -echo

++ read pass

++ echo pass2 ‘Input Enter’

pass2 Input Enter

++ read pass2

++ stty echo

[[email protected]
test]#


 

国际化与本地化:这个太高尚了,所以没记任何笔记。

echo 与printf
I/0重定向等 语 法:echo [-ne][字符串]或 echo [–help][–version]
补充说明:echo会将输入的字符串送往标…