#
把下面的 地址拷贝到 迅雷的下载地点:
基本格式
ftp://username:password@host:port/path/file
比如:
ftp://user:pass@118.85.xxx.x/ring_17000_QuanGuo_20090513.rar
结合 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都可以正常使用
结合 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字符串,注意保留原变量的值!
2.OpenSSH服务配置
双击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服务器,连接界面弹出后,按提示输入用户名、私钥密码,验证通过后即可登录服务器了。
|
|
#关键字
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;
我这里有个比较特殊的需求
是要有个 文件夹 能创建,删除,移动 子文件夹
但 本身文件夹 是不能 删除的
比如
/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 是不能删除的
由于 需求原因,需要匹配 提取中文,大量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]+$也是一样的结果。
1. 去除 空行
sed 'N;s/"n/ /g' file
实际问题
主要在编码问题下。
我把这解决的办法说下吧,主要这统一 编码 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)
x = 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
x = 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
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
|