Skynet

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

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

          #



           
          把下面的 地址拷貝到  迅雷的下載地點:
          基本格式
          ftp://username:password@host:port/path/file


          比如:
             ftp://user:pass@118.85.xxx.x/ring_17000_QuanGuo_20090513.rar


          posted @ 2009-05-13 14:55 劉凱毅 閱讀(1324) | 評論 (0)編輯 收藏


          結合 windows ssh 搭建,你會知道更多

          [轉] 配置cygwin下中文支持

          版權聲明:轉載時請以超鏈接形式標明文章原始出處和作者信息及本聲明
          http://fangsblog.blogbus.com/logs/4787655.html

            配置cygwin來支持中文

                http://my.opera.com/render/blog/show.dml/369483

           Site From: http://ergophile.bokee.com/1145741.html

          I googled it.

          http://www.linuxeden.com/forum/blog/index.php?op=ViewArticle&articleId=567&blogId=110848


          bamanzi | 28 九月, 2004 22:14

          大致寫了一下,有待補充。
          本來一年前就打算寫的,但后來覺得老黃寫更合適,但這家伙似乎只對代碼有興趣,總不寫文檔。

          終端

          locale支持

          Cygwin的locale支持一直都不太好,采用zh_CN.gb2312好像問題很多,我一直采用的是zh_CN.gbk
          ~/.bashrc
          LC_CTYPE=zh_CN.gbk
          CHARSET=GBK #(glib2需要使用找個環境變量確定文件名的編碼)
          export LC_CTYPE CHARSET

          一些小問題

          允許bash輸入、輸出中文字符
          ~/.inputrc
          set convert-meta off
          set input-meta on
          set output-meta on

          ls顯示中文文件名(而不是一堆問號)
          alias ls="/bin/ls --show-control-chars"

          less瀏覽中文文件
          less --raw-control-chars
          另外LESSCHARSET環境變量也很有用

          X下的中文支持

          locale支持

          Cygwin的locale支持一直都有問題,好在X程序還可以使用XLOCALE。
          建議還是使用zh_CN.gbk, 不要使用zh_CN.GB2312

          在移植程序時需要注意不要讓程序連接libcygwin.a里面的setlocale,而是采用libX11.a里面的_Xsetlocale。方法是:檢查被移植程序的全部源代碼,發現
          #include
          就修改為
          #define X_LOCALE
          #include
          同時注意程序的連接庫要添加-lX11.
          如果對于結果沒有把握,可以找個Dependency Walker查看程序是否連接到了cygwin1.dll里面的setlocale,如果是,就說明有遺漏。

          中文字體

          PCF點陣字體
          GTK1.x 和其他一些老的X程序都是用X字體,

          注意必須要有編碼與locale一致的字體,比如用zh_CN.gbk就必須要由GBK編碼的字體,用zh_CN.GB2312就必須要有GB2312編碼的字體

          如果使用zh_CN.GB2312,這里有一個RedOffice面帶的點陣字體包

          可以采用ttf2bdf從TTF抽取得到bdf格式,然后再用bdf2pcf得到pcf格式的字體文件。
          (這里有一個Windows版本的TTF2BDF,可以將Windows TTF字體轉換出BDF字體, 注意得到bdf后要手工編輯一下文件頭,將編碼聲明修改正確)

          得 到字體之后,放到某個目錄下,執行mkfontdir生成fonts.dir,然后用xset +fp /path/to/your/fonts將字體路徑加入即可(注意與fontconfig的配置不同,這里路徑是不遞歸的,如果有的字體放在子目錄里面, 子目錄也需要添加進去才行)。
          TTF字體
          很多新的應用程序(比如GTK2)都使用fontconfig/libxft2來顯示字體,它對TTF字體的支持比較好(X以前通過freetype, xft模塊也支持TTF字體,但對中日韓字體的支持不是太好,而且也在Cygwin下似乎也沒有這些模塊)

          完全可以使用Linux下的arphic字體包. 如果沒有安裝Linux,可以到http://packages.debian.org下載相應的包,然后用7zip解壓提取出ttf文件。

          得到字體文件之后,放到某個目錄之下,編輯/etc/fonts/local.conf,將字體路徑加入:
          /path/to/my/ttf/fonts
          如果只是自己使用,可以將字體文件放到~/.fonts下,不需要修改任何配置,最多三十秒fontconfig就能夠發現這些字體了。

          中文輸入法

          老黃(hzhr)移植了miniChinput到Cygwin,我也移植了fcitx-1.8.5和3.0,均可以從我的網站上找到 http://www.oliwen.com/bamanzi/cygwin/chinese/

          一般設置了LC_CTYPE和XMODIFIERS就可以在程序中激活輸入輸入法了(除非這個程序沒有XIM支持):

          LC_CTYPE=zh_CN.gbk
          XMODIFIERS="@im=Chinput"
          export LC_CTYPE XMODIFIERS

          對于fcitx而言,XMODIFIERS設置為什么都可以(但必須要設置),所以設置為"@im=Chinput"的話chinput和fcitx都可以正常使用


          posted @ 2009-05-13 08:13 劉凱毅 閱讀(4414) | 評論 (0)編輯 收藏


          結合 cygwin 解決 亂碼問題 (轉) 你會知道更多


                  參考 :  http://www.docin.com/p-4534575.html



          Cygwin + OpenSSH FOR Windows的安裝配置
          Cygwin是一款世界著名軟件,它可將Linux下的自由軟件移植到Windows系統上來應用,了解和掌 握這個軟件,將使您又多了許多有益的選擇,并帶您到一個更廣闊的天空下翱翔,這對于您的學習和工作將起到確定無疑的推動作用。下面我用自己總結的一個例 子,帶大家進入這個世界。
              在windows操作系統中,使用Cygwin + OpenSSH開源軟件來作為遠程連接的安全工具,是一個非常好的方法,得到許多網管人員的青睞。然而要想順利安裝配置好這套軟件,對于初學者來說,是有 一定難度的。為了使同道們少走彎路,特將本人摸索的經驗陳列于此,以供需要者參考。建議在安裝配置這套軟件之前,最好要初步掌握一些Linux終端操作技 能及其技術概念。

          以下所述是在Windows XP系統中實踐完成,其它Windows系統可參照此文實施。
          一、安裝Cygwin + OpenSSH
          首先打開http://Cygwin.com網頁,點擊如下鏈接:

          Install or update

          now!


          將會下載一個安裝Cygwin的setup.exe文件,然后在欲安裝Cygwin + OpenSSH軟件的磁盤上創建Cygwin目錄,在此我們假定為:C:"Cygwin,運行setup.exe后打開圖一:  
                      


                                          圖一
          圖一主要提供關于Cygwin軟件安裝的一些信息,點擊下一步后打開圖二:

          圖二

          圖二提供了三個選項:
          第一選項:從Internet上下載并安裝所需軟件。
          第二選項:從Internet上下載所需軟件安裝包到本地磁盤。
          第三選項:從本地磁盤安裝包的目錄中安裝所需軟件。
          此處選擇從Internet上下載并安裝所需軟件,點擊下一步后打開圖三:

          圖三

          圖三為指定軟件安裝的目標路徑,其它按圖上默認的選項選擇。點擊下一步后打開圖四:

          圖四

          圖四為指定軟件安裝包的本地存放路徑。點擊下一步后打開圖五:

          圖五

          圖五是選擇連接Internet的方式,照圖點選Use IE5 Settings,點擊下一步后打開圖六:

          圖六

          圖六是選擇下載Cygwin的網站,盡量選離我國近的網站,以提高安裝速度。點下一步打開圖七:

          圖七

          圖七為軟件包的選擇界面,All所在行是選擇全部軟件包的位置,其它各行是軟件組的選擇位置,點擊軟件組前部的+號,可以打開軟件組來選擇所屬軟件項。點擊所選軟件項的循環箭頭,可以選擇對相應項目的操作方式,每點一次,該項目的操作方式就變化一次。
          針對All及軟件組的操作方式有四種選擇:即Default、Install、Reinstall和Uninstall,依次代表:默認狀態、安裝、重新安裝和反安裝項。
          針對軟件項的操作方式有兩類五種:
          第一類:對未安裝的軟件項有兩種選擇,即Skip和該軟件的版本號,Skip為跳過該軟件的安裝,顯示軟件版本號為確定安裝該軟件。
          第二類:對已安裝的軟件項有三種選擇,即Keep、Reinstall和Uninstall,依次代表:保持現狀、重新安裝和反安裝項。
          圖八為打開NET軟件組的界面

          圖八

          圖 八表示選擇網絡相關軟件,我們要安裝的是OpenSSH,故點擊OpenSSH軟件項相應的循環箭頭,使原來的Skip變為版本號即可,與OpenSSH 軟件包相關的Cygwin支持軟件包會自動配套選中,例如下一行的OpenSSL軟件包也就自動選中了。點擊下一步打開圖九:

          圖九

          圖九顯示安裝工作的進度,完成后自動打開圖十:

          圖十

          圖十中提示將在桌面建立Cygwin控制臺圖標和在開始菜單中添加Cygwin控制臺圖標。點擊完成按鈕結束安裝工作。
          注意:安裝軟件時,必須以Administrator用戶身份來安裝,否則可能出現許多莫名的問題,大概是由于用戶權限不夠造成的,估計是該軟件出于安全考慮而有意設計的。
          二、Openssh基本配置
          1.增加環境變量
          用鼠標右鍵單擊我的電腦 à屬性 à高級 à環境變量,
          A.在系統變量框中新建變量名為:CYGWIN,變量值為:ntsec tty 的變量。
          B.編輯path變量,在原變量值后加上以分號分隔的C:"Cygwin"bin字符串,注意保留原變量的值!
          2OpenSSH服務配置
          雙擊Cygwin圖標打開控制臺,鍵入:cd /bin轉入bin目錄,再鍵入:ssh-host-config -y,執行后系統提示“CYGWIN=” 時輸入ntsec tty即可。至此,SSH服務已被加入到Windows的自動啟動服務項中了。
          重新啟動電腦進入普通用戶界面,打開Cygwin控制臺后,系統會在Cygwin的home目錄下生成一個同名目錄:youname (此處假設用戶名為:youname),用戶可以在command控制臺上用:
          ssh  youname@127.0.0.1
          登錄自己的SSH服務器試一試,若能登錄則表示安裝配置基本成功,可以進行遠程登錄連接,若遠程登錄失敗,應在SSH服務器防火墻的例外中添加允許SSH端口通過的條目,SSH服務默認使用的是22號端口。
          3.啟動OpenSSH服務的方法
          A.在command控制臺上啟動:
          Net  start  sshd     #啟動SSH服務
          Net  stop  sshd      #停止SSH服務
          B.在Cygwin控制臺上啟動:
          Cygwin  --start  sshd      #啟動SSH服務
          Cygwin  --stop  sshd       #停止SSH服務
          三、Openssh高級配置
          提示:A. 修改sshd_config 文件前應先通過Cygwin控制臺修改文件屬性值,使當前用戶具有修改權:
          cd /etc                    #轉到sshd_config文件所在目錄
          Chmod 777 sshd_config      #修改文件屬性值,使其他用戶可以修改該文件
          。。。。。                 #然后參照后面介紹的1、2、3條進行操作
          Chmod 644 sshd_config      #修改文件屬性,使其恢復原來的屬性值
          B. sshd_config文件被修改后,必須重啟SSH服務后改動項才能生效。
          1.更改OpenSSH工作端口及協議版本

          用寫字板打開C:"Cygwin"etc"sshd_config文件,將port 22改為port 10022或其它自己想改的端口號,最好選1025 -- 65535之間其它軟件未用的端口號。再將#Protocol 2,1 改為Protocol 2,使當前的SSH服務只支持2.0協議版本。此兩項更改的目的是為了增強系統的安全性。

          2.禁止超級用戶遠程登錄OpenSSH

          用寫字板打開 C:"Cygwin"etc"sshd_config 文件,將 #PermitRootLogin yes 修改為PermitRootLogin no即可。若系統需要超級用戶登錄,則不必修改此項目。

          3.僅使用非對稱密鑰安全登錄

          A用寫字板打開 C:"Cygwin"etc"sshd_config 文件,將#PasswordAuthentication yes 修改為 PasswordAuthentication no 。

          B.在Cygwin控制臺:

          cd /home/youname      #轉到當前用戶目錄

          mkdir .ssh            #建立 .ssh隱含目錄

          C.將制作好的authorized_keys公鑰文件復制到c:"Cygwin"home"youname".ssh目錄下

          D.在Cygwin控制臺:

          cd /home/youname/.ssh    #轉到 .ssh隱含目錄

          chmod 600 authorized_keys   #修改文件屬性使之生效(注:屬性值大于600時該文件無效)
          此后用戶遠程訪問ssh服務器時,將不能憑用戶密碼登錄,只能憑借對應的私鑰來登錄,排除了密碼暴力破解的可能,提高了網絡訪問的安全性。
          4.公鑰對的生成
          由于習慣了用putty作為登錄ssh服務器的工具,故在此僅介紹用putty軟件生成密鑰對的方法。
          A可以從http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html處,選擇putty.zip下載,該軟件為自由軟件,可免費使用,當前版本為V 0.60。
          B解壓后運行puttygen.exe , 打開圖十一:

          圖十一

          如圖選擇SSH-2 RSA和1024密鑰長度,點擊Generate按鈕,打開圖十二:

          圖十二

          將鼠標在電腦屏幕上隨機移動,密鑰生成進度條隨鼠標指針移動而前進,直至完成并呈現圖十三:

          圖十三

          圖上部框中顯示的是公鑰內容,用戶可以在key passphrase框及confirm passphrase框中輸入密鑰密碼,以使密鑰丟失后多一道安全防護。當然如果為了方便也可以不設密鑰密碼。
          依 次點擊save public key和save private key按鈕,分別保存生成的公鑰和私鑰,將保存的公鑰文件改為authorized_key文件名,或將圖十三上部框中的公鑰內容復制到 authorized_key文件中,并保存為純文本文件(本人習慣于后一種方法),然后將該文件復制到用戶的 .SSH目錄中應用,注意:該文件在使用時必須將其屬性值改為小于等于600方可應用,否則該公鑰不會生效。而默認以 .ppk擴展名保存的私鑰文件,則要妥善保管好,今后訪問SSH服務器就要憑此私鑰登錄了。
          四、卸載Cygwin
          卸 載Cygwin與安裝Cygwin的過程差不多,也是先運行setup.exe,與安裝時一樣操作,直到出現圖七所示界面時,將All設置為 UnInstall后再點擊下一步,系統將自動完成Cygwin軟件的卸載,Cygwin的安裝目錄需要手工刪除,注冊表內與Cygwin相關的項目也要 手動刪除,如若刪除不盡,可能會影響到以后Cygwin的順利安裝和配置,切記!
          五、PUTTY軟件的簡單應用
          運行Putty.exe打開圖十四:

          圖十四

          在Host Name框中輸入SSH服務器的IP地址,Port框中輸入OpenSSH服務的端口號,然后點開Connection à SSH à Auth打開圖十五:

          圖十五

          按 圖中選擇相應項,在private key file for authentication框中填入自己私鑰的保存路徑,再回到圖十四,在Saved sessions框中輸入一個相關名字,再點擊Save按鈕將當前會話以相關命名保存起來,以供將來重復使用該會話。使用時選中會話,點擊Load按鈕裝 入,再點擊Open按鈕開始連接SSH服務器,連接界面彈出后,按提示輸入用戶名、私鑰密碼,驗證通過后即可登錄服務器了。



          posted @ 2009-05-12 19:21 劉凱毅 閱讀(7940) | 評論 (2)編輯 收藏




          #關鍵字
             python,pycurl, SGMLParser ,sqlite3, 抓取 , 增量計算,encodeuri 轉換,crontab ,mail
          #參考
            sqlite3  http://linuxgazette.net/109/chirico1.html
            SGMLParser http://www.woodpecker.org.cn/diveintopython/html_processing/index.html




          提取 python
          import pycurl
          from sgmllib import SGMLParser
          import re
          from urllib import quote, unquote 

          #使用 SGMLParser(html 分析) 類繼承
          #
          詳細請查看
          #
             http://www.woodpecker.org.cn/diveintopython/html_processing/index.html
          class BaiduTop_GMLParser(SGMLParser):
              
          def reset(self, verbose=0):
                  SGMLParser.reset(self)
                  self.data
          =[]
                  self.a 
          = None
                  
              
          def start_a(self, attrs):
                  href 
          = [v for k, v in attrs if k=='href']
                  rsc
          =re.search('word=(.*)\+(.*)', href[0] )    
                  
          if href and rsc :
                     
          #baidu 頁面編碼為 gbk ,并且中文 encodeuri 了
                      #此轉換為 utf8
                      music=unquote(rsc.group(1)).decode('gbk').encode('utf8')
                      actors
          =unquote(rsc.group(2)).decode('gbk').encode('utf8')
                      self.data.append((actors,music))
                      self.a
          =True
              
          def getData(self):
                  
          return self.data
              
          def __init__(self):
                  self.reset()
                  c 
          = pycurl.Curl()
                  c.setopt(pycurl.URL, 
          'http://list.mp3.baidu.com/topso/mp3topsong.html?id=1?top2')
                  
          import StringIO
                  b 
          = StringIO.StringIO()
                  c.setopt(pycurl.WRITEFUNCTION, b.write)
                  c.setopt(pycurl.FOLLOWLOCATION, 
          1)
                  c.setopt(pycurl.MAXREDIRS, 
          5)
                  
          #c.setopt(pycurl.PROXY, 'http://11.11.11.11:8080')
                  #c.setopt(pycurl.PROXYUSERPWD, 'aaa:aaa')
                  c.perform()
                  self.feed(b.getvalue())



          使用 py
          #!python      
          #
           -*- coding: UTF8 -*-
          '''
          新添加入 top  
          當天全量
          沒有 歌手名

          退出 top

          drop table baidu_Top ;
          create table baidu_Top (
            id integer auto_increment  PRIMARY KEY ,
            actor varchar(300) ,
            music varchar(300) ,
            createTime DATE
          );

          '''


          import sqlite3,os,sys
          import datetime, calendar  
          import pdb

          from baiduTop500 import BaiduTop_GMLParser
          class Action():
              
          def __init__(self,conn,data):
                  self.conn 
          = conn 
                  self.data 
          = data 
                  self.allData 
          = []
                  self.newData 
          = []
                  self.newNotActorData
          =[]
                  self.allNotActorData
          =[]

              
          def insertAll(self): 
                  insertSql 
          = "insert into baidu_Top (actor,music,createTime) values (?,?,date()) ;"
                  isSql 
          = "select music from baidu_Top where actor=? and music=? and createTime=strftime('%Y-%m-%d',?) ;"
                  isSql2 
          = "select music from baidu_Top where actor=? and music=? and createTime=strftime('%Y-%m-%d',?) ;"
                  cur 
          = self.conn.cursor()
                  
          for actor,music in self.data :
                      
          try :
                          cur.execute(isSql,(actor,music,datetime.date.today())  )
                          res 
          = cur.fetchall()
                          
          if not res :
                              cur.execute(insertSql,(actor,music)  )
                              self.allData.append( (actor,music) )
                              
          if actor=="" or actor==" " :
                                  self.allNotActorData.append((actor,music))
                              conn.commit()
                          todate
          =(datetime.date.today()-datetime.timedelta(days=1))
                          cur.execute(isSql2,(actor,music,todate)  ) 
                          
          if not cur.fetchall() :
                              self.newData.append( (actor,music) )
                              
          if actor=="" or actor==" " :
                                  self.newNotActorData.append((actor,music))
                              conn.commit()
                      
          except Exception, myError:
                          excType, excValue, traceBack 
          = sys.exc_info()
                          
          print excType
                          
          print myError
                  
          try :
                      cur.close()
                  
          except:
                      
          pass
                      
              

          def pfor(title,data):
              
          for a,m in data :
                  
          print "%s\t%s\t%s" %(title,a,m)
          def line():
              
          print
              
          print "___________________________________________________________________________________"
              
          print "___________________________________________________________________________________"
              
          print 

          if   __name__  ==  "__main__":
              
          try:
                  conn 
          = sqlite3.connect("/home/xj_liukaiyi/src/python/baidu_top/ex500")
                  ac 
          = Action(conn,BaiduTop_GMLParser().getData())
                  ac.insertAll()
                  
          #ac.insertNewByDate()
                  
                  
          print '''說明 %s : 
                      new 對比前一天新添加
                      new not actor 對比前一天新增加但沒歌手名
                      all 當天top 500 展現全部 
                      all not actor 當天 top 500 展現全部全但沒歌手 
          ''' %(datetime.date.today())
                  line()
                  pfor(
          "new",ac.newData)
                  line()
                  pfor(
          "new not actor",ac.newNotActorData)
                  line()
                  pfor(
          "all",ac.allData)
                  line()
                  pfor(
          "all not actor",ac.allNotActorData)
              
          finally:
                  conn.close()



          再通過系統
          crontab -e


          郵箱 gbk 轉碼 ,后發送 。每天早上 5點
          0 5 * * * /usr/local/bin/python /home/xj_liukaiyi/src/python/baidu_top/Action.py|perl -MEncode -ne 'print encode("GBK", decode("UTF-8",$_));' > tmp ; mail -s "baidu Top 500"  liukaiyi@gmail.com  < tmp;

          posted @ 2009-05-06 09:47 劉凱毅 閱讀(1536) | 評論 (0)編輯 收藏


          我這里有個比較特殊的需求
          是要有個 文件夾  能創建,刪除,移動 子文件夾
                   但 本身文件夾 是不能 刪除的

          比如
          /tmp/a/b  #不能 刪除
             /tmp/a/b/c # 能 創建,刪除,移動

          這謝謝 perl msn群中的 W.W 幫我解決

            具體來說,目錄也是一個文件,但是這個文件的內容,是它的子目錄的結構。對于/tmp/a來說,它是一個文件,但是如果用戶對/tmp/a沒有寫權限,它就改動不了/tmp/a的目錄結構
            在/tmp/a里新建目錄,刪除原有的目錄/tmp/a/b,等等,實際改動的是/tmp/a的目錄結構,也就是說,實際改動的是/tmp/a的內容

          root:
          #mkdir /tmp/a; mkdir /tmp/a/b;
          #chmod a+w /tmp/a/b; chmod o-w /tmp/a

          user-a:
          $rmdir /tmp/a/b                     #This will fail, user-a don't have enough permission.
          $cd /tmp/a/b; mkdir c; touch d;
          $rmdir /tmp/a/b/c; rm /tmp/a/b/d;   #This is OK.


          ls -l 中
          /tmp/a  drwxr-xr-x
          /tmp/a/b  drwxrwxrwx

          b 文件夾,也就是我上面 需要的文件夾 ,是 777 了但  user-a 是不能刪除的

          posted @ 2009-05-04 17:00 劉凱毅 閱讀(1787) | 評論 (0)編輯 收藏

             由于 需求原因,需要匹配 提取中文,大量google下,并沒有我需要的。花了一個小時大概測試,此utf8中文通過,特留文。
             參考: http://hi.baidu.com/nivrrex/blog/item/e6ccaf511d0926888d543071.html
                    http://topic.csdn.net/u/20070404/15/b011aa83-f9b7-43b3-bbff-bfe4f653df03.html

              首先,確保所有編碼都為 unicode
                   比如 str.decode('utf8') #從utf8文本中
                        u"啊l"  #在控制臺輸出中   
                   (羅嗦下)本想使用參考一定編碼 Hex 但郁悶的是 這每個字好像占2個位置,使用正則匹配無果。
              其次,確定中文范圍 : [\u4e00-\u9fa5]
                    (這里注意下 python 的re寫的時候) 要  u"[\u4e00-\u9fa5]" #確定正則表達式也是 unicode 的
              demo :
             
          >>> print re.match(ur"[\u4e00-\u9fa5]+","")
          None
          >>> print re.match(ur"[\u4e00-\u9fa5]+",u"")
          <_sre.SRE_Match object at 0x2a98981308>


          >>> print re.match(ur"[\u4e00-\u9fa5]+",u"t")
          None


          >>> print tt
          現在才明白
          >>> tt
          '\xe7\x8e\xb0\xe5\x9c\xa8\xe6\x89\x8d\xe6\x98\x8e\xe7\x99\xbd'
          >>> print re.match(r"[\u4e00-\u9fa5]",tt.decode('utf8'))
          None
          >>> print re.match(ur"[\u4e00-\u9fa5]",tt.decode('utf8'))
          <_sre.SRE_Match object at 0x2a955d9c60>


          >>> print re.match(ur".*["u4e00-"u9fa5]+",u"hi,匹配到了")
          <_sre.SRE_Match object at 0x2a955d9c60>
          >>> print re.match(ur".*["u4e00-"u9fa5]+",u"hi,no no")
          None
                



          其他 擴充 范圍 (轉)
          這里是幾個主要非英文語系字符范圍(google上找到的):
          2E80~33FFh:中日韓符號區。收容康熙字典部首、中日韓輔助部首、注音符號、日本假名、韓文音符,中日韓的符號、標點、帶圈或帶括符文數字、月份,以及日本的假名組合、單位、年號、月份、日期、時間等。
          3400~4DFFh:中日韓認同表意文字擴充A區,總計收容6,582個中日韓漢字。
          4E00~9FFFh:中日韓認同表意文字區,總計收容20,902個中日韓漢字。
          A000~A4FFh:彝族文字區,收容中國南方彝族文字和字根。
          AC00~D7FFh:韓文拼音組合字區,收容以韓文音符拼成的文字。
          F900~FAFFh:中日韓兼容表意文字區,總計收容302個中日韓漢字。
          FB00~FFFDh:文字表現形式區,收容組合拉丁文字、希伯來文、阿拉伯文、中日韓直式標點、小符號、半角符號、全角符號等。
          比如需要匹配所有中日韓非符號字符
          ,那么正則表達式應該是^[\u3400-\u9FFF]+$
          理論上沒錯
          , 可是我到msn.co.ko隨便復制了個韓文下來, 發現根本不對, 詭異
          再到msn.co.jp復制了個’お’
          , 也不得行..
          然后把范圍擴大到^
          [\u2E80-\u9FFF]+$, 這樣倒是都通過了, 這個應該就是匹配中日韓文字的正則表達式了, 包括我們臺灣省還在盲目使用的繁體中文
          而關于中文的正則表達式
          , 應該是^[\u4E00-\u9FFF]+$, 和論壇里常被人提起的^[\u4E00-\u9FA5]+$很接近
          需要注意的是論壇里說的^
          [\u4E00-\u9FA5]+$這是專門用于匹配簡體中文的正則表達式, 實際上繁體字也在里面, 我用測試器測試了下’中華人民共和國’, 也通過了, 當然, ^[\u4E00-\u9FFF]+$也是一樣的結果。

             
            
          posted @ 2009-05-02 18:27 劉凱毅 閱讀(30671) | 評論 (3)編輯 收藏


          轉:http://www.cnblogs.com/yisohoo/articles/1423940.html

          我這使用 cu 論壇 下的 rhel-5.1-server-i386-dvd.iso 安裝配置 

          以前用fedora配置yum很方便,可是來到RHLE就不是那么順手了,如果不做如下設置,經常出現不能通過yum安裝軟件的情況,下面是詳細配置(網上找的)


          首先,rhel5系統安裝的時候其實已經有yum了,只是因為如果用官方的網站更新的話除非你是用錢買的rhel5.否則它會提示注冊之類的。所以只要把 yum的更新地址改成開源的就行了。而限定yum更新地址的文件在/etc/yum.repos.d/里。先把它們改成備份文件,即在后面加.bak。
          [root@killgoogle ~]# mv /etc/yum.repos.d/rhel-debuginfo.repo /etc/yum.repos.d/rhel-debuginfo.repo.bak
          [root@killgoogle ~]# mv /etc/yum.repos.d/rpmforge.repo.rpmnew /etc/yum.repos.d/rpmforge.repo.rpmnew.bak



          建立新的配置文件:
          [root@killgoogle ~]# cd /etc/yum.repos.d
          [root@killgoogle ~]# touch rhel-debuginfo.repo
          [root@killgoogle ~]# touch mirrors-rpmforge
          [root@killgoogle ~]# touch rpmforge.repo



          往新的配置文件寫東西:
          [root@killgoogle ~]#vi rhel-debuginfo.repo
          [base]
          name=CentOS-5 - Base
          #mirrorlist=http://mirrorlist.centos.org/?release=$releasever5&arch=$basearch&
          repo=os
          #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
          baseurl=http://ftp.sjtu.edu.cn/centos/5/os/$basearch/
          gpgcheck=1
          gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos5

          #released updates
          [update]
          name=CentOS-5 - Updates
          #mirrorlist=http://mirrorlist.centos.org/?release=4&arch=$basearch&repo=updates
          baseurl=http://ftp.sjtu.edu.cn/centos/5/updates/$basearch/
          gpgcheck=1
          gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos5

          #packages used/produced in the build but not released
          [addons]
          name=CentOS-5 - Addons
          #mirrorlist=http://mirrorlist.centos.org/?release=4&arch=$basearch&repo=addons

          baseurl=http://ftp.sjtu.edu.cn/centos/5/addons/$basearch/
          gpgcheck=1
          gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos5

          #additional packages that may be useful
          [extras]
          name=CentOS-5 - Extras
          #mirrorlist=http://mirrorlist.centos.org/?release=4&arch=$basearch&repo=extras

          baseurl=http://ftp.sjtu.edu.cn/centos/5/extras/$basearch/
          gpgcheck=1
          gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos5

          #additional packages that extend functionality of existing packages
          [centosplus]
          name=CentOS-5 - Plus
          #mirrorlist=http://mirrorlist.centos.org/?release=4&arch=$basearch&repo=centosplus
          baseurl=http://ftp.sjtu.edu.cn/centos/5/centosplus/$basearch/
          gpgcheck=1
          enabled=0
          gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos5

          #contrib - packages by Centos Users
          [contrib]
          name=CentOS-5 - Contrib
          #mirrorlist=http://mirrorlist.centos.org/?release=4&arch=$basearch&repo=contrib
          baseurl=http://ftp.sjtu.edu.cn/centos/5/contrib/$basearch/
          gpgcheck=1
          enabled=0
          gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos5

          # vi dag.repo
          [dag]
          name=Dag RPM Repository for RHEL5
          baseurl=http://ftp.riken.jp/Linux/dag/redhat/el5/en/$basearch/dag/
          enabled=1
          gpgcheck=1
          gpgkey=http://ftp.riken.jp/Linux/dag/packages/RPM-GPG-KEY.dag.txt




          修改第二個配置文件:
          [root@killgoogle ~]vi mirrors-rpmforge
          http://apt.sw.be/redhat/el5/en/$ARCH/dag
          http://archive.cs.uu.nl/mirror/dag.wieers/redhat/el5/en/$ARCH/dag
          http://ftp2.lcpe.uni-sofia.bg/freshrpms/pub/dag/redhat/el5/en/$ARCH/dag
          #http://ftp.heanet.ie/pub/freshrpms/pub/dag/redhat/el5/en/$ARCH/dag
          http://ftp-stud.fht-esslingen.de/dag/redhat/el5/en/$ARCH/dag
          http://mirror.cpsc.ucalgary.ca/mirror/dag/redhat/el5/en/$ARCH/dag
          http://mirrors.ircam.fr/pub/dag/redhat/el5/en/$ARCH/dag
          http://rh-mirror.linux.iastate.edu/pub/dag/redhat/el5/en/$ARCH/dag
          http://rpmfind.net/linux/dag/redhat/el5/en/$ARCH/dag
          http://wftp.tu-chemnitz.de/pub/linux/dag/redhat/el5/en/$ARCH/dag
          http://www.mirrorservice.org/sites/apt.sw.be/redhat/el5/en/$ARCH/dag





          修改第三個配置文件:
          [root@killgoogle ~]# vi rpmforge.repo
          # Name: RPMforge RPM Repository for Red Hat Enterprise 5 - dag
          # URL: http://rpmforge.net/
          [rpmforge]
          name = Red Hat Enterprise $releasever - RPMforge.net - dag
          #baseurl = http://apt.sw.be/redhat/el5/en/$basearch/dag
          mirrorlist = http://apt.sw.be/redhat/el5/en/mirrors-rpmforge
          #mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge
          enabled = 1
          protect = 0
          gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag
          gpgcheck = 1


          下面有2種方法:

          這種我嘗試過,在服務器上已搭建好 yum 

          參考 : http://www.linuxdiyf.com/viewarticle.php?id=70630

             這里注意 

             vi /etc/yum.conf 
              加上這么一句:timeout=120 

          和 CentOS-Base.repo 文件中的 5.0 都修改為 5.2 就可以了


          方法2 :


          如果風速慢的話可以通過增加yum的超時時間,這樣就不會總是因為超時而退出。
          [root@killgoogle ~]vi /etc/yum.conf
          加上這么一句:timeout=120
          到這里配置差不多就完了。還有一個包需要安裝:rpmforge-release-0.3.6-1.el5.rf.i386.rpm
          如果不安裝的話有可能會出現以下錯誤:GPG key retrieval failed: [Errno 5] OSError: [Errno 2] 沒有那個文件或目錄: '/etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag'
          http://rpmfind.net/linux/RPM/找到這個包,然后
          [root@killgoogle ~]rpm -ivh rpmforge-release-0.3.6-1.el5.rf.i386.rpm

          #我這安裝地址
          #wget ftp://rpmfind.net/linux/dag/redhat/el5/en/i386/dag/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
          接下來就是輸入KEY了。
          [root@killgoogle ~] rpm --import http://mirror.be10.com/centos/RPM-GPG-KEY-CentOS-5

              如果不行請使用:  rpm --import http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

               謝謝 三樓,我這有時間 核實下 告訴大家 。

          這樣基本上yum就可以用了。不過如果覺得不爽的話還可以優化:
          加速yum
          [root@killgoogle ~]yum install yum-fastestmirror yum-presto
          指定或去掉軟件源的mirror:
          可以在baseurl中將比較慢的mirror去掉
          你的yum鏡像的速度測試記錄文件:
          /var/cache/yum/timedhosts.txt
          yum Existing lock 錯誤的解決辦法
          如果系統啟動的時候, yum 出現Existing lock /var/run/yum.pid: another copy is running as pid 3380. Aborting. 可以用下面的辦法解決:
          [root@killgoogle ~]/etc/init.d/yum-updatesd stop
          也可以用以下方法:
          [root@killgoogle ~]rm -f /var/run/yum.pid
          主要原因就是yum在自動更新只要關掉它就可以了

          完了。現在就可以測試能不能用了哦:
          [root@killgoogle ~]yum install mplayer
          這是安裝mplayer如果要刪除則是:
          [root@killgoogle ~]yum remove mplayer



          posted @ 2009-04-29 14:28 劉凱毅 閱讀(10654) | 評論 (5)編輯 收藏


          1. 去除 空行
          sed 'N;s/"n/ /g'  file


          posted @ 2009-04-23 17:20 劉凱毅 閱讀(287) | 評論 (0)編輯 收藏


          實際問題
          主要在編碼問題下。
          我把這解決的辦法說下吧,主要這統一 編碼 utf8
          0. 數據庫 導入 utf8
             如果 導入文本 gbk
                perl -MEncode -ne 'print encode("UTF-8", decode("GBK",$_));'  file.txt > xx.data
          1. 代碼編碼 # -*- coding:UTF8 -*-
          2. 文件讀取 編碼 cc=bm(x.readline()).split('"t')
                bm=lambda str : str.decode('gbk').encode('utf-8')
          3. 對外輸出 str="%s%s"t" % (str,bmug(f))
                bmug=lambda str : unicode(str).encode("utf8")

          就是統一編碼 ,我這統一 utf8
            
          # -*- coding: UTF8 -*-
          import sqlite3,os
          """
          drop table imusic ;
          create table  imusic(    
            musicname   varchar(300) ,
            productid    varchar(300) ,
            downcount   varchar(300) ,
            musicname2   varchar(300) ,
            actorname2 varchar(300) ,
             iszl varchar(300) ,
             isqu varchar(300) ,
             zlmmf  varchar(300) ,
             zlmp3 varchar(300) ,
             qump3 varchar(300) ,
             cpid varchar(300) ,
             cpname varchar(300) ,
             rows varchar(300) ,
             tmp1 varchar(300) 
          );

          如果要使用主鍵
          在建表第一列加  id integer auto_increment  PRIMARY KEY
          文本就要先處理下來
          awk 'BEGIN{vi=0}{vi++;print vi"\t"$0;}' 03.data > 03.id.data


          # 文本 "t 分割  導入
          .separator "\t"
          .import db2.data imusic
          .separator ","

          #導出
          sqlite> .output a.txt
          sqlite> select * from tab_xx;
          sqlite> .output stdout


          """

          conn 
          = sqlite3.connect("ex1")
          cur 
          = conn.cursor()

          #編碼轉換 (我這 在 windows 下)
          bm=lambda str : str.decode('gbk').encode('utf-8')
          bmcc
          =lambda str : str.decode('utf8').encode('gbk')
          bmug
          =lambda str : unicode(str).encode("utf8")

          def  getValues(actor,music,zlxz,qqxz):
               
          try:
                   sql
          =" select * from imusic  where musicname2=?  and actorname2=?   "  
                   cur.execute(sql,( music,actor)  ) 
                   res 
          = cur.fetchall()
                   
          if res :
                        data
          =[]
                        
          for tt in res[0]:
                           data.append(tt)
                        data[
          7]=''
                        
          print zlxz,"*",qqxz
                        
          if data[8]=='' and  data[9]=='' :
                            
          return None
                        
          if  zlxz=='有振鈴下載'  :
                            data[
          8]=''
                        
          if  qqxz=='有全曲下載'  :
                            data[
          9]=''
                        
          if data[8]=='' and  data[9]=='' :
                            
          return None
                        
          return data
               
          except Exception, myError:
                    
          print "[error] %s %s %s %s" % (actor,music,zlxz,qqxz)
                    
          = open( "all_comm.txt""r")
          cc
          =x.readline().split('\t')
          while cc :
              
          try:
                  cc
          =bm(x.readline()).split('\t')
                  dd
          =getValues(cc[6],cc[5],cc[21],cc[18])
                  
          if dd :
                      str 
          = "" 
                      
          for f in dd :
                          str
          ="%s%s\t" % (str,bmug(f))
                      
          print str
              
          except Exception, myError:
                    
          print "[error] %s" %   cc


          下面 demo 注重 update 對比
              # conn.total_changes 使用
          為 update 跟新
          # -*- coding: UTF8 -*-
          import sqlite3,os,sys
          conn 
          = sqlite3.connect("ex4")
          cur 
          = conn.cursor()

          #編碼轉換 (我這 在 windows 下)
          bm=lambda str : str.decode('gbk').encode('utf-8')
          bmcc
          =lambda str : str.decode('utf8').encode('gbk')
          bmug
          =lambda str : unicode(str).encode("utf8")



          def  getValues(actor,music,zlxz,qqxz,updateRow):
               
          try:
                   updateSql 
          = " update  imusic set tmp1=? where musicname2=?  and actorname2=?  "
                   
          # 1 有振鈴 有全曲
                   # 2 無振鈴 有全曲
                   # 3 有振鈴 無全曲
                   # 4 無振鈴 無全曲
                   start = "0" ;
                   
          if  zlxz=='有振鈴下載' and  qqxz=='有全曲下載'  :
                        start
          ="1"
                   
          if  zlxz=='無振鈴下載' and  qqxz=='有全曲下載'  :
                        start
          ="2"
                   
          if  zlxz=='有振鈴下載' and  qqxz=='無全曲下載'  :
                        start
          ="3"
                   
          if  zlxz=='無振鈴下載' and  qqxz=='無全曲下載'  :
                        start
          ="4"
                   cur.execute(updateSql,(start,music,actor)  )
                   
          if not conn.total_changes==updateRow:
                        updateRow
          =conn.total_changes
                        log 
          = "[success=%s update=%s] %s-%s:%s %s" % (start,conn.total_changes,actor,music,zlxz,qqxz)
                   
          else :
                        log 
          = "[giveUp start=%s] %s-%s:%s %s" % (start,actor,music,zlxz,qqxz)
                   
          print bmcc(log)
                   os.system(
          " echo %s >> log " % (bmcc(log)) )
                   conn.commit()
                   
          return updateRow
               
          except Exception, myError:
                    excType, excValue, traceBack 
          = sys.exc_info()
                    
          print excType
                    
          print myError          

                    
          = open( "all_comm2.txt""r")
          cc
          =x.readline().split('\t')
          myrows
          =0
          updateRow 
          = 0 ;
          while cc :
              myrows
          =myrows+1
              
          try:
                  
          print "rows = %s " % (myrows)
                  cc
          =bm(x.readline()).split('\t')
                  updateRow
          =getValues(cc[6],cc[5],cc[21],cc[18],updateRow)
              
          except Exception, myError:
                  excType, excValue, traceBack 
          = sys.exc_info()
                  
          print excType
                  
          print myError   




          posted @ 2009-04-23 10:09 劉凱毅 閱讀(1369) | 評論 (0)編輯 收藏



          rsync -avzP   cpByDataFile.py  --progress xj_liukaiyi@122.102.*.*:/home/xj_liukaiyi/test/

          rsync -avzP  xj_wanghongbao@10.25.*.*:/newdata2/003.tar.gz   --progress .


          不需要輸入密碼
          在服務器上:
          su -c 'vim  /etc/rsyncd.conf'

          [gz]
          path=/home/xj_liukaiyi/gz/
          hosts allow = 124.207.100.....
          read only = no


          rsync -avzP --password-file=g:\cygwin\secret  xj_liukaiyi@122.102.4.90::gz  --progress .

          g:\cygwin\secret  寫入
          xj_liukaiyi=123456




          posted @ 2009-04-20 18:22 劉凱毅 閱讀(247) | 評論 (0)編輯 收藏

          僅列出標題
          共12頁: First 上一頁 3 4 5 6 7 8 9 10 11 下一頁 Last 
          主站蜘蛛池模板: 铜鼓县| 和顺县| 白朗县| 息烽县| 清原| 云南省| 南澳县| 广河县| 西盟| 彭山县| 绥芬河市| 巧家县| 富锦市| 东乡| 米林县| 通州市| 湖南省| 伊金霍洛旗| 永年县| 华宁县| 万全县| 伊川县| 石柱| 太仓市| 南平市| 长泰县| 商河县| 临城县| 绿春县| 美姑县| 青海省| 同仁县| 九龙城区| 天峻县| 祥云县| 老河口市| 南平市| 罗城| 巨野县| 阳曲县| 江城|