Skynet

          ---------- ---------- 我的新 blog : liukaiyi.cublog.cn ---------- ----------

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            112 Posts :: 1 Stories :: 49 Comments :: 0 Trackbacks

          #


           參考 : http://mifunny.info/python-image-watermark-script-68.html

           下載 :http://code.google.com/p/nothing-at-all/downloads/detail?name=watermark_py_20080724.tar.bz2&can=2&q=

            直接解壓:
            easy_install PIL
            >>python "watermark.py" "C:"Documents and Settings"lky"桌面"py"fangfei.jpg" 2

             Save to  C:"Documents and Settings"lky"桌面"py"fangfei_watermark.jpg



           

          posted @ 2009-10-27 23:49 劉凱毅 閱讀(1043) | 評論 (0)編輯 收藏


          telnet 192.168.101.103 8014
          import threading  

          class myThread(threading.Thread):
              
          def __init__(self,conn,add):
                  threading.Thread.
          __init__(self)
                  self.inputstr 
          = ''
              self.connection
          =conn
              self.address
          =add
              
          def run(self):
              ii
          =0
                  
          while True:
                  self.connection.settimeout(
          50)
                      buf 
          = self.connection.recv(1024)
                  
          if  buf.rfind("\n"> -1 :  
                          
          print "**-"+self.inputstr
                          self.connection.close() 
                          
          break
                      
          else:  
                          self.inputstr
          +=buf
                  
          if ii==0:
                      self.connection.send(buf)
                  ii
          +=1
                          
          continue

                      
                      


          if __name__ == '__main__':  
             
          import socket  
             sock 
          = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
             sock.bind((
          '192.168.101.103'8014))  
             sock.listen(
          5)
             
          while True:  
                 
          try:
                     connection,address 
          = sock.accept()
                     ithread
          =myThread(connection,address)
                     ithread.start()
                 
          except socket.timeout:  
                     
          print 'time out'  



          posted @ 2009-10-27 19:16 劉凱毅 閱讀(1856) | 評論 (0)編輯 收藏


          在服務器上發現的定時的導入腳本,記錄下來。還是很有用的
          30 06 * * * /data/dmsp/shell/crontab_search_stats_import.sh >> /data/dmsp/logs/crontab_search_stats_import.log
          #!/bin/sh

          y
          =$(date -"-1 day" +%Y)
          m
          =$(date -"-1 day" +%m)
          d
          =$(date -"-1 day" +%d)

          #/data/dmsp/ftp/dim_stats/2009/09/14

          act
          =dim_stats
          mypath
          =/data/dmsp/ftp/${act}/${y}/${m}/$wmqeeuq/

          echo $mypath
          statpath
          =${mypath}${act}${y}${m}$wmqeeuq.tar.bz2.state

          for(( j=1; j<10000; j=j+1))
          do
              
          if [ -"${statpath}" ] ; then
                        tar xjf ${mypath}${act}${y}${m}$wmqeeuq.tar.bz2 
          -C ${mypath}
                          mysql 
          -127.0.0.1 -P3306 -u root -pmysql -"LOAD DATA INFILE '${mypath}part-00000' INTO TABLE dmsp.dmsp_veidoo character set utf8 FIELDS TERMINATED BY '\t' lines terminated by '\n'";
                  
          break    
              
          else
                  echo 
          "[${j}:1000] not ready. sleep 10 seconds then retry."
                  sleep 
          10
              fi
          don


          posted @ 2009-10-23 10:51 劉凱毅 閱讀(2428) | 評論 (1)編輯 收藏


          數據挖掘研究內容和本質
            隨著DMKD研究逐步走向深入,數據挖掘和知識發現的研究已經形成了三根強大的技術支柱:數據庫、人工智能和 數理統計。因此,KDD大會程序委員會曾經由這三個學科的權威人物同時來任主席。目前DMKD的主要研究內容包括基礎理論、發現算法、數據倉庫、可視化技 術、定性定量互換模型、知識表示方法、發現知識的維護和再利用、半結構化和非結構化數據中的知識發現以及網上數據挖掘等。

          數據挖掘所發現的知識最常見的有以下四類:
          - 廣義知識(Generalization)
            廣義知識指類別特征的概括性描述知識。根據數據的微觀特性發現其表征的、帶有普遍性的、較高層次概念的、中觀和宏觀的知識,反映同類事物共同性質,是對數據的概括、精煉和抽象。

          廣 義知識的發現方法和實現技術有很多,如數據立方體、面向屬性的歸約等。數據立方體還有其他一些別名,如“多維數據庫”、“實現視圖”、“OLAP"等。該 方法的基本思想是實現某些常用的代價較高的聚集函數的計算,諸如計數、求和、平均、最大值等,并將這些實現視圖儲存在多維數據庫中。既然很多聚集函數需經 常重復計算,那么在多維數據立方體中存放預先計算好的結果將能保證快速響應,并可靈活地提供不同角度和不同抽象層次上的數據視圖。另一種廣義知識發現方法 是加拿大SimonFraser大學提出的面向屬性的歸約方法。這種方法以類SQL語言表示數據挖掘查詢,收集數據庫中的相關數據集,然后在相關數據集上 應用一系列數據推廣技術進行數據推廣,包括屬性刪除、概念樹提升、屬性閾值控制、計數及其他聚集函數傳播等。
             
          - 關聯知識(Association)
            它反映一個事件和其他事件之間依賴或關聯的知識。如果兩項或多項屬性之間存在關聯,那么其中一項的屬性值就可 以依據其他屬性值進行預測。最為著名的關聯規則發現方法是R.Agrawal提出的Apriori算法。關聯規則的發現可分為兩步。第一步是迭代識別所有 的頻繁項目集,要求頻繁項目集的支持率不低于用戶設定的最低值;第二步是從頻繁項目集中構造可信度不低于用戶設定的最低值的規則。識別或發現所有頻繁項目 集是關聯規則發現算法的核心,也是計算量最大的部分。
             
          - 分類知識(Classification&Clustering)
            它反映同類事物共同性質的特征型知識和不同事物之間的差異型特征知識。最為典型的分類方法是基于決策樹的分類 方法。它是從實例集中構造決策樹,是一種有指導的學習方法。該方法先根據訓練子集(又稱為窗口)形成決策樹。如果該樹不能對所有對象給出正確的分類,那么 選擇一些例外加入到窗口中,重復該過程一直到形成正確的決策集。最終結果是一棵樹,其葉結點是類名,中間結點是帶有分枝的屬性,該分枝對應該屬性的某一可 能值。最為典型的決策樹學習系統是ID3,它采用自頂向下不回溯策略,能保證找到一個簡單的樹。算法C4.5和C5.0都是ID3的擴展,它們將分類領域 從類別屬性擴展到數值型屬性。

          數據分類還有統計、粗糙集(RoughSet)等方法。線性回歸和線性辨別分析是典型的統計模型。為降低決策樹生成代價,人們還提出了一種區間分類器。最近也有人研究使用神經網絡方法在數據庫中進行分類和規則提取。
             
          - 預測型知識(Prediction)
            它根據時間序列型數據,由歷史的和當前的數據去推測未來的數據,也可以認為是以時間為關鍵屬性的關聯知識。

          目 前,時間序列預測方法有經典的統計方法、神經網絡和機器學習等。1968年Box和Jenkins提出了一套比較完善的時間序列建模理論和分析方法,這些 經典的數學方法通過建立隨機模型,如自回歸模型、自回歸滑動平均模型、求和自回歸滑動平均模型和季節調整模型等,進行時間序列的預測。由于大量的時間序列 是非平穩的,其特征參數和數據分布隨著時間的推移而發生變化。因此,僅僅通過對某段歷史數據的訓練,建立單一的神經網絡預測模型,還無法完成準確的預測任 務。為此,人們提出了基于統計學和基于精確性的再訓練方法,當發現現存預測模型不再適用于當前數據時,對模型重新訓練,獲得新的權重參數,建立新的模型。 也有許多系統借助并行算法的計算優勢進行時間序列預測。
             
          - 偏差型知識(Deviation)
            此外,還可以發現其他類型的知識,如偏差型知識(Deviation),它是對差異和極端特例的描述,揭示事 物偏離常規的異常現象,如標準類外的特例,數據聚類外的離群值等。所有這些知識都可以在不同的概念層次上被發現,并隨著概念層次的提升,從微觀到中觀、到 宏觀,以滿足不同用戶不同層次決策的需要。
             

          數據挖掘的功能
            數據挖掘通過預測未來趨勢及行為,做出前攝的、基于知識的決策。數據挖掘的目標是從數據庫中發現隱含的、有意義的知識,主要有以下五類功能。
             
          - 自動預測趨勢和行為
            數據挖掘自動在大型數據庫中尋找預測性信息,以往需要進行大量手工分析的問題如今可以迅速直接由數據本身得出 結論。一個典型的例子是市場預測問題,數據挖掘使用過去有關促銷的數據來尋找未來投資中回報最大的用戶,其它可預測的問題包括預報破產以及認定對指定事件 最可能作出反應的群體。
             
          - 關聯分析
            數據關聯是數據庫中存在的一類重要的可被發現的知識。若兩個或多個變量的取值之間存在某種規律性,就稱為關 聯。關聯可分為簡單關聯、時序關聯、因果關聯。關聯分析的目的是找出數據庫中隱藏的關聯網。有時并不知道數據庫中數據的關聯函數,即使知道也是不確定的, 因此關聯分析生成的規則帶有可信度。
             
          - 聚類
            數據庫中的記錄可被化分為一系列有意義的子集,即聚類。聚類增強了人們對客觀現實的認識,是概念描述和偏差分 析的先決條件。聚類技術主要包括傳統的模式識別方法和數學分類學。80年代初,Mchalski提出了概念聚類技術牞其要點是,在劃分對象時不僅考慮對象 之間的距離,還要求劃分出的類具有某種內涵描述,從而避免了傳統技術的某些片面性。
             
          - 概念描述
            概念描述就是對某類對象的內涵進行描述,并概括這類對象的有關特征。概念描述分為特征性描述和區別性描述,前 者描述某類對象的共同特征,后者描述不同類對象之間的區別。生成一個類的特征性描述只涉及該類對象中所有對象的共性。生成區別性描述的方法很多,如決策樹 方法、遺傳算法等。
             
          - 偏差檢測
            數據庫中的數據常有一些異常記錄,從數據庫中檢測這些偏差很有意義。偏差包括很多潛在的知識,如分類中的反常實例、不滿足規則的特例、觀測結果與模型預測值的偏差、量值隨時間的變化等。偏差檢測的基本方法是,尋找觀測結果與參照值之間有意義的差別。
             

          數據挖掘常用技術
          - 人工神經網絡
            仿照生理神經網絡結構的非線形預測模型,通過學習進行模式識別。
             
          - 決策樹
            代表著決策集的樹形結構。
             
          - 遺傳算法
            基于進化理論,并采用遺傳結合、遺傳變異、以及自然選擇等設計方法的優化技術。
             
          - 近鄰算法
            將數據集合中每一個記錄進行分類的方法。
             
          - 規則推導
            從統計意義上對數據中的“如果-那么”規則進行尋找和推導。

          采用上述技術的某些專門的分析工具已經發展了大約十年的歷史,不過這些工具所面對的數據量通常較小。而現在這些技術已經被直接集成到許多大型的工業標準的數據倉庫和聯機分析系統中去了。
            摘自《數據挖掘討論組》
          posted @ 2009-10-22 18:05 劉凱毅 閱讀(2022) | 評論 (1)編輯 收藏


          中文參考資料:http://www.biosino.org/R/R-doc/
          報表圖: http://zoonek2.free.fr/UNIX/48_R/03.htmlhttp://addictedtor.free.fr/graphiques/graphiques/graph_113.png

          *



          *


          posted @ 2009-10-22 16:59 劉凱毅 閱讀(353) | 評論 (0)編輯 收藏

          1. 安裝 python 2.6 (鄙視下-python.org/download被屏蔽)
          2. 可愛的Python: 使用setuptools 孵化Python egg
          3. easy_install django
          4. http://github.com/sneeu/django-wiki  download 
          5. django-admin.py startproject newtest
          6. cd newtest
          7. 拷貝 django-wiki 解壓包到 newtest/wiki
          8. vim setting.py
          DATABASE_ENGINE = 'sqlite3'
          DATABASE_NAME 
          = 'mysite.db'

          INSTALLED_APPS = (
              ......
              'newtest.wiki',
          )
          9. vim urls.py
          urlpatterns = patterns('',
              (r'^wiki/'
          , include('wiki.urls')),
          )
          10. cd ..
          11. manage.py syncdb
          12. manage.py runserver

          13. http://127.0.0.1:8000/wiki/

          哦~ 不太好,改善改善!
          自己的定制自己的wiki 呵呵

          posted @ 2009-10-21 00:13 劉凱毅 閱讀(1485) | 評論 (0)編輯 收藏


          我這 對測試 mysql infobright 壓縮 和 查詢速度 進行測試
          測試結果我會盡快登出的
          #!/usr/bin/python
          import MySQLdb
          #conn = MySQLdb.Connection('127.0.0.1', 'root', '', 'dmspi')
          conn=MySQLdb.connect(host="127.0.0.1",port=3307,user="root",passwd="",db="test")
          cur 
          =  conn.cursor()
          st 
          = "create table testtime4 ( "

          try :
                  
          for cc in xrange(1000):
                          
          if cc % 2 == 0 :
                                  st 
          += 'a'+str(cc)+' varchar(20),\n'
                          
          else :
                                  st 
          += 'a'+str(cc)+' int(20),\n'

                  st 
          += 'a int(20)'
                  st 
          = st + ");"
                  cur.execute(st)

                 
          # import sys
                  # sys.exit(
          1)
                  
          import random
                  ccs 
          = lambda : random.choice(['apple''pear''peach''orange''lemon',''])
                  ccn 
          = lambda : random.randint(0,10000)


                  fd 
          = open('/data/logs/dataFormat/test/t4.data','w')
                  
          for cc in xrange(10000000):
                          st 
          = ''
                          ss 
          = ccs()
                          nn 
          = str(ccn())
                          
          for cc in xrange(1000):
                                  
          if cc < 15 :
                                          
          if cc % 2 == 0 :
                                                  st 
          += ss+'\t'
                                          
          else :
                                                  st 
          += nn+'\t'
                                  
          else :
                                          st 
          += '\t'
                          st 
          += nn
                          
          print >>fd,st
                  fd.close()

                  # cur.execute(
          'load data infile \'/data/logs/dataFormat/test/t4.data\'  into table testtime4 fields terminated by "\t";')
          finally :
                  cur.close()
                  conn.close()


          mysql infobright 測試結果報告:



          一千萬條數據導入花費時間:

          mysql
          > load data infile '/data/logs/dataFormat/test/t4.data'  into table testtime4 fields terminated by "\t";
          Query OK, 
          10000000 rows affected (36 min 47.00 sec)


          測試一 :
          1. 表屬性 有 500 列 
          2. 屬性列都有值, 無 Null 數據
          3. 原始文件大小 26G ,導入數據倉庫 5G

          部分測試時間:
          select count(*from testtime where a0="pear" and a2="orange";
          1 row in set (3.63 sec)

          select a6,count(*from testtime group by a6 order by a6 desc ;
          5 rows in set (2.24 sec)

          mysql
          > select count(*from testtime where a0="apple" ;
          1 row in set (5.68 sec)


          測試二 :
          1. 表屬性 有 1000 列 
          2. 屬性列前 15 列有值 , 其余后面都為 Null
          3. 原始文件大小 10G ,導入數據倉庫 215M

          mysql
          > select a0,count(*from testtime4 group by a0 ;
          +--------+----------+
          | a0     | count(*|
          +--------+----------+
          | lemon  |  1665543 | 
          | peach  |  1666276 | 
          | orange |  1667740 | 
          | pear   |  1665910 | 
          | apple  |  1665678 | 
          | NULL   |  1668863 | 
          +--------+----------+
          6 rows in set (4.55 sec)


          select * from testtime4 order by a6 desc limit 2000000,1 ;
          1 row in set (3.30 sec)


          posted @ 2009-10-20 13:44 劉凱毅 閱讀(1604) | 評論 (0)編輯 收藏



          參考:http://blog.chinaunix.net/u/29134/showart_485759.html
          可以說本文關鍵就是他


          mysql max 版本下載.
          或者你這 心情好 編譯邊
          參考 : ./configure  --prefix=/home/lky/tools/mysql2 --with-plugins=heap,innobase,myisam,ndbcluster,federated,blackhole   --enable-assembler --enable-static
          然后 在 my.cnf 的
          [mysqld]
          federated  #加入


           mysql 參考:http://blog.chinaunix.net/u3/90603/showart_1925406.html


          mysql> show engines;
          +------------+----------+----------------------------------------------------------------+--------------+-----+------------+
          | Engine     | Support  | Comment                                                        | Transactions | XA  | Savepoints |
          +------------+----------+----------------------------------------------------------------+--------------+-----+------------+
          | ndbcluster | DISABLED | Clustered, fault-tolerant, memory-based tables                 | YES          | NO  | NO         |
          | FEDERATED  | YES      | Federated MySQL storage engine        | YES          | NO  | NO         |
          | MRG_MYISAM | YES      | Collection of identical MyISAM tables                          | NO           | NO  | NO         |
          | MyISAM     | DEFAULT  | Default engine as of MySQL 3.23 with great performance         | NO           | NO  | NO         |
          | BLACKHOLE  | YES      | /dev/null storage engine (anything you write to it disappears) | NO           | NO  | NO         |
          | InnoDB     | YES      | Supports transactions, row-level locking, and foreign keys     | YES          | YES | YES        |
          | MEMORY     | YES      | Hash based, stored in memory, useful for temporary tables      | NO           | NO  | NO         |
          | ARCHIVE    | YES      | Archive storage engine                                         | NO           | NO  | NO         |
          +------------+----------+----------------------------------------------------------------+--------------+-----+------------+


          http://topic.csdn.net/u/20071122/11/016C3D25-82A2-46DC-B8B0-3A22F8573C70.html


          測試:
          0. mysql_install_db 生成 測試 basedir
          1. mysqld_safe  服務器開啟
          2. mysql 測試

          先郁悶句 在max 版本上 沒有 mysql_install_db !!,自己想辦法把 ,下個其他版本的 給 install database !
          [client]
          socket
          =/home/lky/data/d2/mysql.sock
          port
          =3308

          [mysqld]
          port
          =3308
          datadir
          =/home/lky/data/d2
          socket
          =/home/lky/data/d2/mysql.sock

          user
          =lky
          # Default to using old password format for compatibility with mysql 
          3.x
          # clients (those using the mysqlclient10 compatibility package).
          #old_passwords
          =123

          [mysqld_safe]
          log-error
          =/home/lky/data/d2/mysqld.log
          pid-file
          =/home/lky/data/d2/mysqld.pid


          命令  
          啟動 服務1 # 注意 my.cnf 的端口 和  datadir
          cd /usr/local/mysql-max-5.1.5-alpha-linux-i686-glibc23
          update user set host="%" where user='root' ;
          ./bin/mysqld_safe --defaults-file=/home/lky/data/d1/my.cnf 

          啟動 服務2 # 注意 my.cnf 的端口 和  datadir
          cd /usr/local/mysql-max-5.1.5-alpha-linux-i686-glibc23
          ./bin/mysqld_safe --defaults-file=/home/lky/data/d2/my.cnf 

          運行1
          ./bin/mysql --defaults-file=/home/lky/data/d1/my.cnf
          >create table t_tableC (id int not null auto_increment primary key, c_str char(20) not null)
          >insert into t_tableC values(1,'cc');
          運行2
          ./bin/mysql --defaults-file=/home/lky/data/d2/my.cnf
          >create table t_tableC (id int not null auto_increment primary key, c_str char(20) not null)
            engine federated
            connection = 'mysql://lky@127.0.0.1:3307/test/t_tableC';
          > select * from t_tableC ;
          +----+-------+
          | id | c_str |
          +----+-------+
          |  1 | cc    |
          +----+-------+


          最讓我喜歡的一個特性:
          在 d2 上 (運行2)上本地的 表 可以和  federated 進行 表連
          mysql> select * from t2 ;
          +------+------+
          | id   | vn   |
          +------+------+
          |    1 | cc   |
          +------+------+
          1 row in set (0.29 sec)

          mysql
          > show create table t2 ;
          +-------+----------------------------------------------------------------------------------------------------------------------+
          | Table | Create Table                                                                                                         |
          +-------+----------------------------------------------------------------------------------------------------------------------+
          | t2    | CREATE TABLE `t2` (
            `id` 
          int(11default NULL,
            `vn` 
          char(10default NULL
          ) ENGINE
          =MyISAM DEFAULT CHARSET=latin1 |
          +-------+----------------------------------------------------------------------------------------------------------------------+
          1 row in set (0.00 sec)

          mysql
          > select * from t_tableC c,t2 t where c.id=c.id ;
          +----+--------+------+------+
          | id | c_str  | id   | vn   |
          +----+--------+------+------+
          |  1 | cc     |    1 | cc   |
          |  2 | ccttcc |    1 | cc   |
          +----+--------+------+------+
          2 rows in set (0.00 sec)






           




          posted @ 2009-10-08 12:59 劉凱毅 閱讀(2057) | 評論 (0)編輯 收藏

          參考:
            http://hadoop.apache.org/common/docs/r0.15.2/streaming.html

          注意
            目前 streaming 對 linux pipe #也就是 cat |wc -l 這樣的管道 不支持,但不妨礙我們使用perl,python 行式命令!!
            原話是 :
            Can I use UNIX pipes? For example, will -mapper "cut -f1 | sed s/foo/bar/g" work?
              Currently this does not work and gives an "java.io.IOException: Broken pipe" error.
              This is probably a bug that needs to be investigated.
            但如果你是強烈的 linux shell pipe 發燒友 ! 參考下面
            $> perl -e 'open( my $fh, "grep -v null tt |sed -n 1,5p |");while ( <$fh> ) {print;} '
               #不過我沒測試通過 !!

          環境 :hadoop-0.18.3
          $> find . -type f -name "*streaming*.jar"
          ./contrib/streaming/hadoop-0.18.3-streaming.jar


          測試數據:
          -bash-3.00$ head tt 
          null    false    3702    208100
          6005100    false    70    13220
          6005127    false    24    4640
          6005160    false    25    4820
          6005161    false    20    3620
          6005164    false    14    1280
          6005165    false    37    7080
          6005168    false    104    20140
          6005169    false    35    6680
          6005240    false    169    32140
          ......


          運行:
          c1="  perl -ne  'if(/.*\t(.*)/){\$sum+=\$1;}END{print \"\$sum\";}'  "
          # 注意 這里 $ 要寫成 \$    " 寫成 \"
          echo $c1; # 打印輸出  perl -ne 'if(/.*"t(.*)/){$sum+=$1;}END{print $sum;}'
          hadoop jar hadoop-0.18.3-streaming.jar
            
          -input file:///data/hadoop/lky/jar/tt 
             -
          mapper   "/bin/cat" 
             -
          reducer "$c1" 
            
          -output file:///tmp/lky/streamingx8


          結果:
          cat /tmp/lky/streamingx8/*
          1166480

          本地運行輸出:
          perl -ne 'if(/.*"t(.*)/){$sum+=$1;}END{print $sum;}' < tt
          1166480

          結果正確!!!!


          命令自帶文檔:
          -bash-3.00$ hadoop jar hadoop-0.18.3-streaming.jar -info
          09/09/25 14:50:12 ERROR streaming.StreamJob: Missing required option -input
          Usage: $HADOOP_HOME
          /bin/hadoop [--config dir] jar \
                    $HADOOP_HOME
          /hadoop-streaming.jar [options]
          Options:
            
          -input    <path>     DFS input file(s) for the Map step
            
          -output   <path>     DFS output directory for the Reduce step
            
          -mapper   <cmd|JavaClassName>      The streaming command to run
            
          -combiner <JavaClassName> Combiner has to be a Java class
            
          -reducer  <cmd|JavaClassName>      The streaming command to run
            
          -file     <file>     File/dir to be shipped in the Job jar file
            
          -dfs    <h:p>|local  Optional. Override DFS configuration
            
          -jt     <h:p>|local  Optional. Override JobTracker configuration
            
          -additionalconfspec specfile  Optional.
            
          -inputformat TextInputFormat(default)|SequenceFileAsTextInputFormat|JavaClassName Optional.
            
          -outputformat TextOutputFormat(default)|JavaClassName  Optional.
            
          -partitioner JavaClassName  Optional.
            
          -numReduceTasks <num>  Optional.
            
          -inputreader <spec>  Optional.
            
          -jobconf  <n>=<v>    Optional. Add or override a JobConf property
            
          -cmdenv   <n>=<v>    Optional. Pass env.var to streaming commands
            
          -mapdebug <path>  Optional. To run this script when a map task fails 
            
          -reducedebug <path>  Optional. To run this script when a reduce task fails 
            
          -cacheFile fileNameURI
            
          -cacheArchive fileNameURI
            
          -verbose


          posted @ 2009-09-25 14:33 劉凱毅 閱讀(3369) | 評論 (0)編輯 收藏


          什么都不說,在代碼里
          #!/usr/bin/env python
          #
          -*- encoding: utf8 -*-
          from ftplib import FTP
          import sys,os,getopt

          opts,args
          =getopt.getopt(sys.argv[1:],'hf:d:i:u:p:')

          def usage():
              
          print '''
          Help Information:
            上傳正常結束后,會在上次文件邊創建成功狀態文件夾,名稱為 [上次文件名.state ]
              -h : Show help information
              -f : local upload file   eg -> /home/user/xx/file.tar
              -d : upload to ftp path  eg -> /x/xx/xxx 
              -i : [optional] Default 122.102.xx.xx
              -u : [optional] Default xx
              -p : [optional] Default *** (xx passwd)
              
          '''


          fip
          ='122.xx.xx.xx'
          fur
          ='xx'
          fpw
          ='123'
          for o,a in opts:
              
          if o=='-h':
                  usage()
                  sys.exit()
              
          if o=='-f' : upload_file=a
              
          if o=='-d' : ftp_path=a
              
          if o=='-i' : fip=a
              
          if o=='-u' : fur=a
              
          if o=='-p' : fpw=a


          ftp 
          = FTP(fip)
          ftp.login(fur,fpw)

          if not ( locals().has_key('ftp_path'and locals().has_key('upload_file') ):
              usage()
              sys.exit()


          # 迭代 創建 目錄 
          to_path='/'
          for sp in ftp_path.split('/')[1:]:
              drs 
          = ftp.nlst(to_path)
              
          if to_path=='/':to_path+=sp
              
          else : to_path+='/'+sp
              
          if not to_path in drs :
                  ftp.mkd(to_path)

          #到 最終 目錄下 
          ftp.cwd(to_path)


          # 上傳準備
          bufsize = 1024
          file_handler 
          = open(upload_file,'rb')
          file_name
          =os.path.split(upload_file)[1]

          # 判定是否 有 上傳完 狀態文件夾,如果有刪除
          sfile=to_path+'/'+file_name+'.state'
          if sfile in ftp.nlst(to_path):
              
          print '[Resend] delete original dir state '+sfile
              ftp.rmd( sfile )
              
          # 上傳文件
          ftp.storbinary('STOR %s' % (file_name),file_handler,bufsize)

          # 如果 上傳 文件大小不一 ,不標注 成功 上傳 狀態文件夾 
          if not os.path.getsize(upload_file) == ftp.size(to_path+'/'+file_name) :
              
          print '[Error]  upload to ftp size Different ! '
              sys.exit()

          # 上傳 成功 創建標示狀態 文件夾 
          ftp.mkd(sfile)
          file_handler.close()
          ftp.quit()


          posted @ 2009-09-09 10:01 劉凱毅 閱讀(1561) | 評論 (1)編輯 收藏

          僅列出標題
          共12頁: 上一頁 1 2 3 4 5 6 7 8 9 下一頁 Last 
          主站蜘蛛池模板: 长兴县| 南通市| 梓潼县| 疏附县| 义乌市| 星子县| 咸宁市| 左贡县| 苍山县| 驻马店市| 江北区| 乌兰县| 施甸县| 怀柔区| 泸定县| 鹤峰县| 海盐县| 尼玛县| 施甸县| 漳州市| 德化县| 凤翔县| 桂东县| 清原| 新田县| 子洲县| 托克托县| 锦屏县| 关岭| 章丘市| 奉节县| 正定县| 襄城县| 岳池县| 临夏县| 曲阳县| 尚志市| 平遥县| 方山县| 盐城市| 抚顺县|