Skynet

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

            BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
            112 Posts :: 1 Stories :: 49 Comments :: 0 Trackbacks

          #



          環(huán)境 :
            個(gè)人 pc  xp 一臺(tái) ;

          使用 : 
               官方下載: mysql-noinstall-5.1.36-win32.zip
                

          1. 解壓 成2個(gè) (文件夾)
               mysql-5.1.36-win32_1  (主)
               mysql-5.1.36-win32_2   (從) 

          2. 配置文件修改
              主服務(wù)器配置修改
                   >mysql-5.1.36-win32_1/my-small.ini  修改名稱(chēng)為   my.ini  
                   >修改剛才 my.ini 文件的 
             [client]
             port  = 3307

          [mysqld]
          server-id    
          = 1
          port        
          = 3307
          binlog-do-db    
          =test 
             binlog-ignore-db=backup
             log-bin=mysql-bin
                  >啟動(dòng) mysql-5.1.36-win32_1/bin/mysqld.exe  --defaults-file=..youpath .my-small.ini 
                  >使用 主 mysql  -u root  創(chuàng)建同步角色
          GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* 
          TO backup@'127.0.0.1'
          IDENTIFIED 
          BY '1234';
                  >并且運(yùn)行 
          mysql> show master status;
          +------------------+----------+--------------+------------------+
          | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
          +------------------+----------+--------------+------------------+
          | mysql-bin
          .000001 |      106 | test         | backup           |
          +------------------+----------+--------------+------------------+
          1 row in set (0.00 sec)


             從服務(wù)器配置:
                  >mysql-5.1.36-win32_2/my-small.ini  修改名稱(chēng)為   my.ini  
                  >修改剛才 my.ini 文件的 
                 
          [client]
          #password    
          = your_password
          port        
          = 3308
          socket        
          = /tmp/mysql.sock

          # Here follows entries for some specific programs

          # The MySQL server
          [mysqld]
          server-id    
          = 2
          master-host    
          = 127.0.0.1
          master-user    
          = backup
          master-password    
          = 1234
          master-port    
          = 3307

          port        
          = 3308

          >啟動(dòng) mysql-5.1.36-win32_2/bin/mysqld.exe ( 我這會(huì)有個(gè)警告,沒(méi)事 )
          >參考 主服務(wù)器運(yùn)行的  show master status; 數(shù)據(jù)
          slave stop; 
          CHANGE MASTER 
          TO MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=106
          slave start; 


          然后 :
          在主mysql服務(wù)器
          use test
          create table tt (ii int); 


          然后在從mysql服務(wù)器
          use test
          show tables;
          mysql> show tables ;
          +----------------+
          | Tables_in_test |
          +----------------+
          | tt             |
          +----------------+
          1 row in set (0.00 sec)










           
          posted @ 2009-07-18 19:03 劉凱毅 閱讀(1367) | 評(píng)論 (2)編輯 收藏



          ftplib模塊定義了FTP類(lèi)和一些方法,用以進(jìn)行客戶(hù)端的ftp編程。可以用python編寫(xiě)一個(gè)自已的ftp客戶(hù)端程序,用于下載文件或鏡像站點(diǎn)。如果想了解ftp協(xié)議的詳細(xì)內(nèi)容,請(qǐng)參考RFC959。

          該模塊是python的通用模塊,所以默認(rèn)應(yīng)該已安裝。ftplib模塊使用很簡(jiǎn)單,暫時(shí)只有一個(gè)FTP類(lèi)和十幾個(gè)函數(shù)。

          下面用一個(gè)交互方式演示一下ftplib的主要功能。

          >>> from ftplib import FTP
          >>> ftp = FTP('ftp.cwi.nl')   # connect to host, default port
          >>> ftp.login()               # user anonymous, passwd anonymous@
          >>> ftp.retrlines('LIST')     # list directory contents
          total 24418
          drwxrwsr-x   5 ftp-usr  pdmaint     1536 Mar 20 09:48 .
          dr-xr-srwt 105 ftp-usr  pdmaint     1536 Mar 21 14:32 ..
          -rw-r--r--   1 ftp-usr  pdmaint     5305 Mar 20 09:48 INDEX
           .
           .
           .
          >>> ftp.retrbinary('RETR README', open('README', 'wb').write)
          '226 Transfer complete.'
          >>> ftp.quit()



          下面一個(gè)下載文件的示例

          #!/usr/bin/env python

          #author:Jims of 
          http://www.ringkee.com/
          #create date: 2005/02/05
          #description: Using ftplib module download a file from a ftp server.

          from ftplib import FTP

          ftp=FTP()

          ftp.set_debuglevel(2) #打開(kāi)調(diào)試級(jí)別2,顯示詳細(xì)信息
          ftp.connect('ftp_server','port') #連接
          ftp.login('username','password') #登錄,如果匿名登錄則用空串代替即可

          print ftp.getwelcome() #顯示ftp服務(wù)器歡迎信息
          ftp.cwd('xxx/xxx/') #選擇操作目錄
          bufsize = 1024 #設(shè)置緩沖塊大小
          filename='dog.jpg' 
          file_handler = open(filename,'wb').write #以寫(xiě)模式在本地打開(kāi)文件
          ftp.retrbinary('RETR dog.jpg',file_handler,bufsize) #接收服務(wù)器上文件并寫(xiě)入本地文件
          ftp.set_debuglevel(0) #關(guān)閉調(diào)試

          ftp.quit() #退出ftp服務(wù)器

          下面一個(gè)上傳文件的示例,要成功運(yùn)行該腳本,需在ftp服務(wù)器上有上傳文件的權(quán)限。

          #!/usr/bin/env python

          #author:Jims of 
          http://www.ringkee.com/
          #create date: 2005/02/05
          #description: Using ftplib module upload a file to a ftp server.

          from ftplib import FTP

          ftp=FTP()

          ftp.set_debuglevel(2)
          ftp.connect('ftp_server','port')
          ftp.login('username','password')

          print ftp.getwelcome()
          ftp.cwd('xxx/xxx/')
          bufsize = 1024
          filename='dog.jpg'
          file_handler = open(filename,'rb')
          ftp.storbinary('STOR dog.jpg',file_handler,bufsize) #上傳文件
          ftp.set_debuglevel(0)

          file_handler.close() #關(guān)閉文件
          ftp.quit()
          posted @ 2009-07-10 12:14 劉凱毅 閱讀(1736) | 評(píng)論 (0)編輯 收藏


          hadoop 原理參考:用 Hadoop 進(jìn)行分布式并行編程
          官方中文文檔:http://hadoop.apache.org/core/docs/r0.18.2/cn/index.html

          1. 首先安裝 cygwin ssh  參考 windows ssh 搭建
          2. 搭建hadoop  參考 Cygwin下的Hadoop快速入門(mén)-偽分布式模式的查缺補(bǔ)漏
             
          這里還有 cygwin putty 控制臺(tái)方法設(shè)置
          3. 開(kāi)發(fā)環(huán)境和 demo 參考

          通過(guò)參考應(yīng)該環(huán)境的搭建沒(méi)問(wèn)題,我這搭建成功了,說(shuō)下我這一些注意到地方吧
          1. 我這使用的最新版本的 hadoop-0.20.0 在參考文檔中,修改 hadoop-site.xml 。
             在這個(gè)版本已經(jīng)在conf下找不到了,我這嘗試修改的 hdfs-site.xml 。測(cè)試的時(shí)候竟然通過(guò)了。
           

          <?xml version="1.0"?>
          <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

          <configuration>
            
          <property>
              
          <name>fs.default.name</name>
              
          <value>hdfs://localhost:9000</value>
            
          </property>

            
          <property>
              
          <name>mapred.job.tracker</name>
              
          <value>localhost:9001</value>
            
          </property>

            
          <property>
              
          <name>dfs.data.dir</name>
              
          <!--linux -->
              
          <!--<value>/home/lky/tools/java/hadoop-0.18.3/dfs</value>-->
              
          <value>C:\\cygwin\\home\\lky\\tools\\java\\hadoop-0.18.3\\dfs\\</value>
            
          </property>


            
          <property>
              
          <name>hadoop.tmp.dir</name>
              
          <value>/tmp</value>
            
          </property>



            
          <property>
              
          <name>dfs.replication</name>
              
          <value>1</value>
            
          </property>


          <property>
            
          <name>fs.trash.interval</name>
            
          <value>60</value>
            
          <description>Number of minutes between trash checkpoints.
            If zero, the trash feature is disabled.
            
          </description>
          </property>
            
          </configuration>

          posted @ 2009-07-08 11:07 劉凱毅 閱讀(1239) | 評(píng)論 (0)編輯 收藏


          在實(shí)際中也可以 由文件導(dǎo)入 db 庫(kù)中 
              awk -F: '{print $1; print $0}' < /etc/passwd 顯示為:
          root
          root:x:0:0:root:/root:/bin/bash
          bin
          bin:x:1:1:bin:/bin:/sbin/nologin
          daemon
          daemon:x:2:2:daemon:/sbin:/sbin/nologin
          adm
          adm:x:3:4:adm:/var/adm:/sbin/nologin
          ............

          awk -F: '{print $1; print $0}' < /etc/passwd |sed 's/\\/\\\\/g'  | db_load -T -t hash passwd.db

          hash 入庫(kù)為  key 為奇數(shù)行,value 為 偶數(shù)行


          下面轉(zhuǎn),收集

             bsddb模塊是用來(lái)操作bdb的模塊,bdb是著名的Berkeley DB,它的性能非常好,mysql的存儲(chǔ)后端引擎都支持bdb的方式。這里簡(jiǎn)單介紹一些關(guān)于bsddb的使用方法。

              bdb不同于一般的關(guān)系數(shù)據(jù)庫(kù),它存儲(chǔ)的數(shù)據(jù)只能是以key和value組成的一對(duì)數(shù)據(jù),使用就像python的字典一樣,它不能直接表示多個(gè)字段,當(dāng)要存儲(chǔ)多個(gè)字段的數(shù)據(jù)時(shí),只能把數(shù)據(jù)作為一個(gè)整體存放到value中。
          使用bsddb面臨的第一問(wèn)題是使用什么數(shù)據(jù)訪問(wèn)方法,bdb支持四種:btree, hash, queue, recno。這里先說(shuō)說(shuō)它們有什么區(qū)別,btree是用的樹(shù)結(jié)構(gòu)來(lái)才存儲(chǔ)的數(shù)據(jù),查詢(xún)速度很快,可以存儲(chǔ)任意復(fù)雜的key和value。hash是用的hash算法,速度其實(shí)和btree比差不多的,但是當(dāng)數(shù)據(jù)量特別巨大時(shí),應(yīng)該使用hash。queue是隊(duì)列操作,它有一個(gè)限制,它只能存儲(chǔ)定長(zhǎng)的數(shù)據(jù),也就是說(shuō)value的長(zhǎng)度是固定的!但是queue可以保持?jǐn)?shù)據(jù)的先進(jìn)先出,并且對(duì)數(shù)據(jù)的插入做了特殊的優(yōu)化,并且提供行級(jí)鎖。queue的key必須是數(shù)字。recno和queue類(lèi)似,但是它可以支持變長(zhǎng)的value,它的key同樣也是數(shù)字。

              這里先對(duì)這四種數(shù)據(jù)訪問(wèn)方法分別做打開(kāi)數(shù)據(jù)庫(kù),簡(jiǎn)單插入一條數(shù)據(jù)的演示。
          對(duì)于python的bsddb模塊來(lái)說(shuō),打開(kāi)數(shù)據(jù)庫(kù)的操作有兩種方式,一是使用原始的接口,就是先打開(kāi)一個(gè)環(huán)境,然后從這個(gè)環(huán)境中打開(kāi)一個(gè)數(shù)據(jù)庫(kù),就像下面:

          import bsddb

          dbenv 
          = bsddb.db.DBEnv()
          dbenv.open(home, bsddb.db.DB_CREATE 
          | bsddb.db.DB_INIT_MPOOL)
          = bsddb.db.DB(dbenv)
          d.open(filename, bsddb.db.DB_BTREE, bsddb.db.DB_CREATE, 
          0666)


          還有一種方式是python特有的,這個(gè)是bsddb模塊本身對(duì)上面的過(guò)程做了包裝,比如打開(kāi)btree的:

          import bsddb

          db 
          = bsddb.btopen('test.db''c')


          看起來(lái)比上面的簡(jiǎn)單多了吧。但這種方式提供的接口很有限,也只有很簡(jiǎn)單的功能,沒(méi)有第一種的靈活,但是它在python2.5的版本里是線程安全的。這里都介紹一下。
          看看一個(gè)例子:
           
          #-*- encoding: gb2312 -*-
          import os, sys, string
          import bsddb, time

          home 
          = "db_home"
          filename 
          = "test.db"
          try:
              
          # 創(chuàng)建home目錄
              os.mkdir(home)
          except:
              
          pass

          # 創(chuàng)建數(shù)據(jù)庫(kù)環(huán)境
          dbenv = bsddb.db.DBEnv()
          # 打開(kāi)數(shù)據(jù)庫(kù)環(huán)境
          dbenv.open(home, bsddb.db.DB_CREATE | bsddb.db.DB_INIT_MPOOL)
          # 創(chuàng)建數(shù)據(jù)庫(kù)對(duì)象
          = bsddb.db.DB(dbenv)
          # 打開(kāi)數(shù)據(jù)庫(kù), 這里的第二個(gè)參數(shù)就是指定使用什么數(shù)據(jù)訪問(wèn)方法
          #
           btree是 bsddb.db.DB_BTREE, hash是bsddb.db.DB_HASH
          #
           queu 是 bsddb.db.DB_QUEUE,  recno 是bsddb.db.DB_RECNO
          d.open(filename, bsddb.db.DB_BTREE, bsddb.db.DB_CREATE, 0666)
          # 插入一條數(shù)據(jù),注意queue和recno的key不能是字符串的,應(yīng)該是數(shù)字
          d.put('test1''zhaowei')    
          print d.items()
          # 關(guān)閉,這時(shí)會(huì)把數(shù)據(jù)寫(xiě)回文件
          d.close()
          dbenv.close()

          下面來(lái)個(gè)使用queue的,注意看有什么區(qū)別:

          #-*- encoding: gb2312 -*-
          import os, sys, string
          import bsddb, time

          home 
          = "db_home"
          filename 
          = "testqueue.db"
          try:
              os.mkdir(home)
          except:
              
          pass

          dbenv 
          = bsddb.db.DBEnv()
          dbenv.open(home, bsddb.db.DB_CREATE 
          | bsddb.db.DB_INIT_MPOOL)
          = bsddb.db.DB(dbenv)
          # queue必須要設(shè)置一個(gè)value的長(zhǎng)度,它的value是定長(zhǎng)的
          d.set_re_len(40)
          d.open(filename, bsddb.db.DB_QUEUE, bsddb.db.DB_CREATE, 
          0666)
          # 它的key必須是數(shù)字
          d.put(1'zhaowei')
          print d.items()

          d.close()
          dbenv.close()

          那簡(jiǎn)單的第二種方式使用如下, 要簡(jiǎn)潔很多了:

          import bsddb

          = bsddb.hashopen("aaa.db""c")
          d[
          'test1'= "zhaowei"
          print d.items()
          d.close()

          posted @ 2009-06-16 23:22 劉凱毅 閱讀(1388) | 評(píng)論 (0)編輯 收藏



          代碼上
          # -*- coding: gbk -*-
          #
              對(duì)應(yīng)參考excel(obj)
          #
                  提供訪問(wèn)excel 參考 sql 訪問(wèn)接口
          #
          excelAction.py   "G:\Documents and Settings\ch\桌面\非四大總計(jì).xls" "A,C,B" "|"
          from pyExcelerator import *
          import sys

          txls 
          = parse_xls(sys.argv[1])
          findcols
          =sys.argv[2].split(',')
          tsplit
          ="%s"%(sys.argv[3])


          bmug
          =lambda str : unicode(str).encode("utf8")

          def cfsize(cha):
              
          if len(cha)==1
                  
          return ord(cha)-ord('A'
              
          else : 
                  fsize
          =0
                  fnum
          =cfsize('Z')+1
                  cc
          =list(cha)
                  
          for tnum in range(len(cc)):
                      fsize
          +=fnum*tnum+cfsize(cc[tnum])
                  
          return fsize


          for tnum in range(len(txls)) :
              
          try:
                  sheetname
          =txls[tnum][0]
                  sheetdata
          =txls[tnum][1]
                  
          for tnum in range(max([tmp[0] for tmp in sheetdata])):
                      
          try :
                          stmp
          =str(tnum+1)+tsplit
                          
          for tmp in findcols :
                              stmp
          +=sheetdata[(tnum,cfsize(tmp))]+tsplit
                          
          print stmp
                      
          except:
                          
          print sys.exc_info()[0]
                          
          pass
              
          except:
                  
          print sys.exc_info()[0]
                  
          pass

          print 'close' 
          posted @ 2009-06-11 13:18 劉凱毅 閱讀(1224) | 評(píng)論 (0)編輯 收藏


          svn log svn://127.0.0.1/zxProject/ --username xxxxxx --password xxxxxx |grep  "2009-05-29 16:38*"
          [xx@wap01 xx]$ svn log -v -r134 svn://127.0.0.1/zxProject/ --username xxxxxx --password xxxxxx
          [xx@wap01 xx]$ svn log -v -r134:135 svn://127.0.0.1/zxProject/ --username xxxxxx --password xxxxxx


          轉(zhuǎn)http://favor.javaeye.com/blog/320522
          svn 命令

          1、將文件checkout到本地目錄
          svn checkout path(path是服務(wù)器上的目錄)
          例如:svn checkout svn://192.168.1.1/pro/domain
          簡(jiǎn)寫(xiě):svn co

          2、往版本庫(kù)中添加新的文件
          svn add file
          例如:svn add test.php(添加test.php)
          svn add *.php(添加當(dāng)前目錄下所有的php文件)

          3、將改動(dòng)的文件提交到版本庫(kù)
          svn commit -m “LogMessage“ [-N] [--no-unlock] PATH(如果選擇了保持鎖,就使用–no-unlock開(kāi)關(guān))
          例如:svn commit -m “add test file for my test“ test.php
          簡(jiǎn)寫(xiě):svn ci

          4、加鎖/解鎖
          svn lock -m “LockMessage“ [--force] PATH
          例如:svn lock -m “lock test file“ test.php
          svn unlock PATH

          5、更新到某個(gè)版本
          svn update -r m path
          例如:
          svn update如果后面沒(méi)有目錄,默認(rèn)將當(dāng)前目錄以及子目錄下的所有文件都更新到最新版本。
          svn update -r 200 test.php(將版本庫(kù)中的文件test.php還原到版本200)
          svn update test.php(更新,于版本庫(kù)同步。如果在提交的時(shí)候提示過(guò)期的話,是因?yàn)闆_突,需要先update,修改文件,然后清除svn resolved,最后再提交commit)
          簡(jiǎn)寫(xiě):svn up

          6、查看文件或者目錄狀態(tài)
          1)svn status path(目錄下的文件和子目錄的狀態(tài),正常狀態(tài)不顯示)
          【?:不在svn的控制中;M:內(nèi)容被修改;C:發(fā)生沖突;A:預(yù)定加入到版本庫(kù);K:被鎖定】
          2)svn status -v path(顯示文件和子目錄狀態(tài))
          第一列保持相同,第二列顯示工作版本號(hào),第三和第四列顯示最后一次修改的版本號(hào)和修改人。
          注:svn status、svn diff和 svn revert這三條命令在沒(méi)有網(wǎng)絡(luò)的情況下也可以執(zhí)行的,原因是svn在本地的.svn中保留了本地版本的原始拷貝。
          簡(jiǎn)寫(xiě):svn st

          7、刪除文件
          svn delete path -m “delete test fle“
          例如:svn delete svn://192.168.1.1/pro/domain/test.php -m “delete test file”
          或者直接svn delete test.php 然后再svn ci -m ‘delete test file‘,推薦使用這種
          簡(jiǎn)寫(xiě):svn (del, remove, rm)

          8、查看日志
          svn log path
          例如:svn log test.php 顯示這個(gè)文件的所有修改記錄,及其版本號(hào)的變化

          9、查看文件詳細(xì)信息
          svn info path
          例如:svn info test.php

          10、比較差異
          svn diff path(將修改的文件與基礎(chǔ)版本比較)
          例如:svn diff test.php
          svn diff -r m:n path(對(duì)版本m和版本n比較差異)
          例如:svn diff -r 200:201 test.php
          簡(jiǎn)寫(xiě):svn di

          11、將兩個(gè)版本之間的差異合并到當(dāng)前文件
          svn merge -r m:n path
          例如:svn merge -r 200:205 test.php(將版本200與205之間的差異合并到當(dāng)前文件,但是一般都會(huì)產(chǎn)生沖突,需要處理一下)

          12、SVN 幫助
          svn help
          svn help ci


          13、版本庫(kù)下的文件和目錄列表
          svn list path
          顯示path目錄下的所有屬于版本庫(kù)的文件和目錄
          簡(jiǎn)寫(xiě):svn ls

          14、創(chuàng)建納入版本控制下的新目錄
          svn mkdir: 創(chuàng)建納入版本控制下的新目錄。
          用法: 1、mkdir PATH…
          2、mkdir URL…
          創(chuàng)建版本控制的目錄。
          1、每一個(gè)以工作副本 PATH 指定的目錄,都會(huì)創(chuàng)建在本地端,并且加入新增
          調(diào)度,以待下一次的提交。
          2、每個(gè)以URL指定的目錄,都會(huì)透過(guò)立即提交于倉(cāng)庫(kù)中創(chuàng)建。
          在這兩個(gè)情況下,所有的中間目錄都必須事先存在。

          15、恢復(fù)本地修改
          svn revert: 恢復(fù)原始未改變的工作副本文件 (恢復(fù)大部份的本地修改)。revert:
          用法: revert PATH…
          注意: 本子命令不會(huì)存取網(wǎng)絡(luò),并且會(huì)解除沖突的狀況。但是它不會(huì)恢復(fù)
          被刪除的目錄

          16、代碼庫(kù)URL變更
          svn switch (sw): 更新工作副本至不同的URL。
          用法: 1、switch URL [PATH]
          2、switch –relocate FROM TO [PATH...]
          1、更新你的工作副本,映射到一個(gè)新的URL,其行為跟“svn update”很像,也會(huì)將
          服務(wù)器上文件與本地文件合并。這是將工作副本對(duì)應(yīng)到同一倉(cāng)庫(kù)中某個(gè)分支或者標(biāo)記的
          方法。
          2、改寫(xiě)工作副本的URL元數(shù)據(jù),以反映單純的URL上的改變。當(dāng)倉(cāng)庫(kù)的根URL變動(dòng)
          (比如方案名或是主機(jī)名稱(chēng)變動(dòng)),但是工作副本仍舊對(duì)映到同一倉(cāng)庫(kù)的同一目錄時(shí)使用
          這個(gè)命令更新工作副本與倉(cāng)庫(kù)的對(duì)應(yīng)關(guān)系。

          17、解決沖突
          svn resolved: 移除工作副本的目錄或文件的“沖突”狀態(tài)。
          用法: resolved PATH…
          注意: 本子命令不會(huì)依語(yǔ)法來(lái)解決沖突或是移除沖突標(biāo)記;它只是移除沖突的
          相關(guān)文件,然后讓 PATH 可以再次提交。

          18、輸出指定文件或URL的內(nèi)容。
          svn cat 目標(biāo)[@版本]…如果指定了版本,將從指定的版本開(kāi)始查找。
          svn cat -r PREV filename > filename (PREV 是上一版本,也可以寫(xiě)具體版本號(hào),這樣輸出結(jié)果是可以提交的)


          posted @ 2009-05-31 00:13 劉凱毅 閱讀(1372) | 評(píng)論 (0)編輯 收藏

          參考:
          顯示   【sheet數(shù)】【sheet Name】【(第一行,第一列)】  
          print sheets[0][1][(0,0)]


          from pyExcelerator import *
          sheets = parse_xls('src/天娛版權(quán)明確的歌曲清單.xls')
          sdata=sheets[0][1]

          #按行數(shù) 迭代
          for tnum in range(max([tmp[0] for tmp in sdata])):
           print sdata[(tnum,0)],'-',sdata[(tnum,1)]

           





          from pyExcelerator import *
          import os
          sheets 
          = parse_xls('xls/版權(quán)確認(rèn)清單表20090601.3.xls')
          cpcc
          = parse_xls('xls/CP對(duì)應(yīng)表.xls')

          g2u
          =lambda str : str.decode('gbk')
          bmug
          =lambda str : unicode(str).encode("gbk")
          def cfsize(cha):
              
          if len(cha)==1
                  
          return ord(cha)-ord('A'
              
          else : 
                  fsize
          =0
                  fnum
          =cfsize('Z')+1
                  cc
          =list(cha)
                  
          for tnum in range(len(cc)):
                      fsize
          +=fnum*tnum+cfsize(cc[tnum])
                  
          return fsize



          cpccmap
          ={}
          tsdata
          =cpcc[0][1]
          for tnum in range(max([tmp[0] for tmp in tsdata]))[:]:
              cpname
          =tsdata[(tnum,cfsize('A'))]
              cpid
          =("%s" % (tsdata[(tnum,cfsize('B'))])).split(".")[0]
              cpccmap[cpname]
          =cpid


          def insertData(cpid,cpname, music,actor,copyrightname,ytime,txls,rows):
              
          #print music,actor,cpname,ytime,txls,rows
              txls.write(rows,cfsize('A'),music)
              txls.write(rows,cfsize(
          'B'),actor)
              txls.write(rows,cfsize(
          'C'),cpname)
              txls.write(rows,cfsize(
          'D'),u'中國(guó)大陸')
              txls.write(rows,cfsize(
          'E'),u'無(wú)')
              txls.write(rows,cfsize(
          'F'),u'')
              txls.write(rows,cfsize(
          'G'),u'')
              txls.write(rows,cfsize(
          'H'),u'無(wú)')
              txls.write(rows,cfsize(
          'I'),ytime.split(' ')[0])
              txls.write(rows,cfsize(
          'J'),u'無(wú)')
              txls.write(rows,cfsize(
          'K'),'0')
              txls.write(rows,cfsize(
          'L'),u'許可')
              txls.write(rows,cfsize(
          'M'),'200')
              txls.write(rows,cfsize(
          'N'),u'許可')
              txls.write(rows,cfsize(
          'O'),'0')
              txls.write(rows,cfsize(
          'P'),u'許可')
              txls.write(rows,cfsize(
          'Q'),'0')
              txls.write(rows,cfsize(
          'U'),copyrightname)
              
              txls.write(rows,cfsize(
          'V'),'100%')
              txls.write(rows,cfsize(
          'W'),cpname)
              txls.write(rows,cfsize(
          'X'),'100%')


          cpmap
          ={}
          for tsdata in sheets :
              
          try:
                  sdata
          =tsdata[1]
                  
          #按行數(shù) 迭代 
                  for tnum in range(max([tmp[0] for tmp in sdata]))[1:]:
                      cpid
          =sdata[(tnum,cfsize('C'))]
                      cpname
          =sdata[(tnum,cfsize('D'))] #.upper()
                      music=sdata[(tnum,cfsize('E'))]
                      actor
          =sdata[(tnum,cfsize('F'))]
                      copyrightname
          =sdata[(tnum,cfsize('H'))]
                      ytime
          =sdata[(tnum,cfsize('K'))]
                      
          if not cpmap.has_key(cpname) :
                          tmpf
          =bmug("cp -r 0000_20090602/ data3/"+cpid+"_20090602/ " )
                          os.system(tmpf)
                          txls
          =Workbook()
                          tsheet
          =txls.add_sheet(u'版權(quán)列表')
                          cpmap[cpname]
          =[txls,1,'data3/'+cpid+u'_20090602/產(chǎn)品信息/'+cpid+'_20090602_01_copyright.xls',tsheet]
                          titles
          ='歌曲名稱(chēng)    演唱者    提供者    授權(quán)區(qū)域    電子化版權(quán)信息(有/無(wú))    需要DRM處理(是/否)    支持二次開(kāi)發(fā)(是/否)    相關(guān)版權(quán)合同記錄(有/無(wú))    授權(quán)期限    全曲授權(quán)    全曲價(jià)格    彩鈴授權(quán)    彩鈴價(jià)格    IVR授權(quán)    IVR價(jià)格    振鈴授權(quán)    振鈴價(jià)格    ISRC    UPC    ICPN    詞曲著作權(quán)權(quán)利人一    詞曲比例一    錄音權(quán)權(quán)利人一    錄音比例一    詞曲著作權(quán)權(quán)利人二    詞曲比例二    錄音權(quán)權(quán)利人二    錄音比例二    詞曲著作權(quán)權(quán)利人三    詞曲比例三    錄音權(quán)權(quán)利人三    錄音比例三    其它'.split('\t')
                          
          for ttnum in range(len(titles)):
                              tsheet.write(0,ttnum,g2u(titles[ttnum]))
                          insertData(cpid,cpname, music,actor,copyrightname,ytime,tsheet,
          1)
                      
          else :
                          tsheet
          =cpmap[cpname][3]
                          cpmap[cpname][
          1]=cpmap[cpname][1]+1
                          insertData(cpid,cpname, music,actor,copyrightname,ytime,tsheet,cpmap[cpname][
          1])
              
          except :
                  
          print "[error]: ", music,actor,cpname,ytime,txls
                  
          pass


          for tkey in cpmap.keys() :
              ct
          =cpmap[tkey]
              
          print ct[2]
              ct[0].save(ct[
          2])





           

          posted @ 2009-05-29 22:23 劉凱毅 閱讀(558) | 評(píng)論 (0)編輯 收藏



          sudo apt-get install openvpn


          mkdir /etc/openvpn/config
          cp config-cc /etc/openvpn/config
          #config-cc里有
            ca.crt
          client-zz.ovpn
          liukaiyi.crt
          liukaiyi.csr
          liukaiyi.key




          cd /etc/openvpn/config
          sudo openvpn --config  client-zz.ovpn


          這里 我就成功了



          ping 10.1.2.22  
          ok








          posted @ 2009-05-23 12:05 劉凱毅 閱讀(206) | 評(píng)論 (0)編輯 收藏



          svn 幫助文檔,大體上瀏覽了下 一些比較好的特性 有:
          http://www.subversion.org.cn/svnbook/


          分支與合并
          鎖定
          svnsync
          版本庫(kù)鉤子
          一個(gè)SVN  Python狀態(tài)爬蟲(chóng)


          注意 使用用戶(hù) (sysmen)  :
          #指定新版本
          vim ~.bashrc #添加了
          alias svn="/usr/local/subversion/
          bin/svn"
          alias svnadmin="/usr/local/subversion/bin/svnadmin"
          alias svnserve="/usr/local/subversion/bin/svnserve"

          #最簡(jiǎn)單 svn 服務(wù)器搭建
          cd /home/sysman/src/svn/
          svnadmin create test
          svnserve -d -r /home/sysman/src/svn/test/

          #最簡(jiǎn)單配置
          #vim svnserve.conf
          [general]
          password-db = passwd
          realm = test

          anon-access = read
          auth-access = write



          #查看
          cd /home/sysman/src/svn/testsrc
          svn list  svn://127.0.0.1/test


          #遷出
          cd /home/sysman/src/svn/testsrc
          svn checkout  svn://127.0.0.1/test


          #遷入
          cd test
          echo "google - baidu " > baidu
          svn add baidu svn://127.0.0.1/test
          svn commit -m 'add ok'
          svn list  svn://127.0.0.1/test
          # baidu
          # tt


          #詳細(xì)參考 :
          http://www.subversion.org.cn/svnbook/
          在文檔中有關(guān)有意思的介紹 (svnsync):
          http://www.subversion.org.cn/svnbook/1.4/svn.ref.svnsync.html


          其他說(shuō)明 :

          1.幫助
          svn help

          svn help add

          2.一般操作
          更新你的工作拷貝
              svn update

          做出修改
              svn add
              svn delete
              svn copy
              svn move

          檢驗(yàn)修改
              svn status
              svn diff

          可能會(huì)取消一些修改
              svn revert

          解決沖突(合并別人的修改)
              svn update
              svn resolved

          提交你的修改
              svn commit




          posted @ 2009-05-19 17:37 劉凱毅 閱讀(8723) | 評(píng)論 (0)編輯 收藏



          Perl/Php Translation

          arrays

          hashes

          data structures

          array split/join

          case conversion

          string comparisons

          functions

          string matching operations

          basename/dirname

          environment variables

          POST/GET parameters

          HTML elements

          URL encode

          MySQL database access


          — Perl arrays — Php arrays
          @a = ();

          @a = ( 'xx', 11, 33.5, );

          @a = 12..33;

          $a[2] = 'something';

          $len = scalar(@a);
          # or
          $len = @a;

          @a3 = ('xx', @a1, @a2);

          ($x, $y) = @a;

          $a[@a] = 'new'; # push

          push
          pop
          shift
          unshift
          splice

          foreach $i (@a) { .. }
          $a = array();

          $a = array( 'xx', 11, 33.5, );

          $a = range(12,33);

          $a[2] = 'something';

          $len = count($a);



          $a3 = array_merge('xx', $a1, $a2);

          list($x, $y) = $a;

          $a[] = 'new'; # push

          array_push
          array_pop
          array_shift
          array_unshift
          array_splice

          foreach ($a as $i) { .. }
          — Perl hashes — Php hashes
          %h = ();

          %h = ( 'x' => 'y',
          'z' => 'w',
          );

          $h{'x'} = 7;

          while (($key,$value) = each(%h))
          { .. }

          $a = keys(%h);
          $b = values(%h);

          delete $h{'x'};
          $h = array();

          $h = array( 'x' => 'y',
          'z' => 'w',
          );

          $h['x'] = 7;

          foreach ($h as $key => $value)
          { .. }

          $a = array_keys($h);
          $b = array_values($h);

          unset( $h['x'] );

          — Perl data structures — Php data structures
          %h = ('a'=>13, 'b'=>25);
          @x = ('hi', 'there', 'all',);

          @mix = ( %h, @x,
          [33..39],
          { x=>15, yy=>23, },
          );

          $mix[0]->{'b'} # == 25
          $mix[0]{'b'} # == 25
          $mix[2]->[2] # == 35
          $mix[2][2] # == 35

          $h = array('a'=>13, 'b'=>25);
          $x = array('hi', 'there', 'all',);

          $mix = array($h, $x,
          range(33,39),
          array('x'=>15, 'yy'=>23),
          );

          $mix[0]['b'] # == 25

          $mix[2][2] # == 35

          — Perl array split/join — Php array split/join
          @a = split( '|', $s );

          @a = split( 's+', $s );


          $s = join( '|', @a );
          $a = preg_split( '/|/', $s,
          -1, PREG_SPLIT_NO_EMPTY );
          $a = preg_split( '/s+/', $s,
          -1, PREG_SPLIT_NO_EMPTY );

          $s = join( '|', $a );
          — Perl case conversion — Php case conversion
          $s = lc($s);
          $s = uc($s);

          $s =~ tr/a-z/A-Z/;
          $s = strtolower($s);
          $s = strtoupper($s);


          — Perl string comparisons — Php string comparisons
          $s1 eq $s2



          $s1 lt $s2
          strcmp($s1,$s2) == 0
          # or
          $s1 === $s2

          strcmp($s1,$s2) < 0
          — Perl functions — Php functions
          sub foo {
          my @args = @_;
          }

          sub foo {
          $x = 5;
          }





          foo2( @a, %h );
          function foo() {
          $args = func_get_args();
          }

          function foo() {
          global $x;
          $x = 5;
          }

          function foo2($x, $y) {
          }

          foo2( $a, $h );
          — Perl string matching operations — Php string matching operations
          $s =~ m/(w+)/;
          $substr = $1;

          @all = ($s =~ m/(w+)/g);


          $s =~ s/s+/X/;
          $s =~ s/s+/X/g;

          $s =~ s/^s+|s+$//g;
          preg_match( "/(w+)/", $s, $match );
          $substr = $match[1];

          preg_match_all( "/(w+)/", $s, $match );
          $all = $match[0];

          $s = preg_replace( "/s+/", 'X', $s, 1 );
          $s = preg_replace( "/s+/", 'X', $s );

          $s = trim($s);
          — Perl basename/dirname — Php basename/dirname
          use File::Basename;

          $b = basename($path);
          $d = dirname($path);
           

          $b = basename($path);
          $d = dirname($path);
          — Perl environment variables — Php environment variables
          %ENV

          $ENV{REQUEST_METHOD}

          $ARGV[$i]

          $0
          $_SERVER

          $_SERVER[REQUEST_METHOD]

          $argv[$i+1]

          $argv[0] # Php/CGI only
          — Perl POST/GET parameters — Php POST/GET parameters
          #form/hyperlink parameters:
          # s : single-valued
          # m : multi-valued

          use CGI (:standard);




          $s = param('s');
          @m = param('m');

          @param_names = param();
          $num_params = param();
          #form/hyperlink parameters:
          # s : single-valued
          # m[] : multi-valued
          # (such as multi-selections
          # and checkbox groups)

          $PARAM
          = array_merge($_GET, $_POST);

          $s = $PARAM['s']; # a scalar
          $m = $PARAM['m']; # an array

          $param_names = array_keys($PARAM);
          $num_params = count($PARAM);
          — Perl HTML elements — Php HTML elements
          use CGI (:standard);







          $ref = "x.cgi";
          a({href=>$ref}, "yy")

          textfield({name=>"yy", size=>5})

          password({name=>"yy", size=>5})

          textarea({name=>"yy",
          cols=>5, rows=>2})

          submit({value=>"yy"})

          button( {name=>"xx",
          value=>"yy",
          onclick=>"submit()",
          }
          )

          %labels = (0=>'a',1=>'q',2=>'x');
          popup_menu( { name=>"xx",
          values=>[0..2],
          labels=>%labels,
          size=>4,
          }
          )


          @a = ('xx','yy','zz');
          radio_group( { name=>'nn',
          values=> @a,
          default=>'_',
          linebreak=>1,
          }
          )

          %labels = ('xx'=>'L1','yy'=>'L2');
          @a = keys( %labels );
          checkbox_group( { name=>'nn',
          values=> @a,
          labels=> %labels,
          }
          )

          table(
          Tr(
          [
          td(['a','b']),
          td(['x','y']),
          ]
          )
          )

          # The Perl/CGI functions have the
          # additional property of "stability"
          # when used in reentrant forms.
          # The values of the HTML elements are
          # set according to the incoming
          # parameter values for those elements.
          # The versions below are not stable.

          $ref = "x.php";
          <a href="<?php echo $ref?>">yy</a>

          <input type=text name=yy size=5>

          <input type=password name=yy size=5>

          <textarea name=yy cols=5 rows=2>

          </textarea>

          <input type="submit" value=yy>

          <input type="button"
          name="xx" value="yy"
          onclick="submit()">



          <select name="xx" size="4">
          <?php
          $labels = array(0=>'a',1=>'q',2=>'x');
          foreach (range(0,2) as $_)
          echo "<option value='$_'>",
          $labels[$_];
          ?>

          </select>

          $a = array('xx','yy','zz');
          foreach ($a as $_)
          echo "<input type=radio
          name=nn value='$_'>$_<br>";




          $labels = array('xx'=>'L1','yy'=>'L2');
          foreach (array_keys($labels) as $_)
          echo "<input type=checkbox
          name=nn value='$_'>",
          $labels[$_];



          <table>
          <tr>
          <td>a</td><td>b</td>

          </tr>
          <tr>
          <td>x</td><td>y</td>
          </tr>
          </table>
          — Perl URL encode — Php URL encode
          use URI::Escape;

          uri_escape($val)
          uri_unescape($val)
           


          urlencode($val)
          urldecode($val)
          — Perl MySQL database access — Php MySQL database access
          use DBI;
          $dbh = DBI->connect(
          'DBI:mysql:test:localhost',
          $usr,$pwd
          );

          $dbh->do( $sql_op )

          $query = $dbh->prepare( $sql_op );
          $query->execute();

          while(
          @record = $query->fetchrow() )
          { .. }


          $dbh->quote($val)



           
          $dbh = mysql_connect(
          'localhost', $usr, $pwd
          );
          mysql_query('USE test')

          mysql_query( $sql_op );

          $results = mysql_query( $sql_op );


          while($record =
          mysql_fetch_row($results))
          { .. }


          "'" . addslashes($val) . "'"

          posted @ 2009-05-15 23:09 劉凱毅 閱讀(1364) | 評(píng)論 (0)編輯 收藏

          僅列出標(biāo)題
          共12頁(yè): First 上一頁(yè) 2 3 4 5 6 7 8 9 10 下一頁(yè) Last 
          主站蜘蛛池模板: 三穗县| 徐州市| 娱乐| 大渡口区| 珲春市| 曲沃县| 天台县| 古田县| 灵川县| 遂宁市| 嘉禾县| 铁力市| 静海县| 白沙| 怀集县| 普兰店市| 房产| 富源县| 嘉兴市| 繁峙县| 永顺县| 永清县| 定南县| 泰宁县| 巴中市| 宜兰县| 海兴县| 麻城市| 大方县| 潼关县| 甘肃省| 高清| 维西| 丽江市| 自治县| 济南市| 西乌珠穆沁旗| 临沧市| 玉山县| 桐庐县| 五寨县|