2018年4月25日星期三

煤气软管替换记

买的二手房基本上没有去维修,就买了十几个E27和E14的LED灯泡换上了。前几天送煤气罐的师傅过来,说连接煤气灶的软管老化了,需要换新的。但是当时房子在装修的时候,软管埋在墙里,没法换,师傅也说没办法。

我上网搜集了一些煤气软管的知识:

  • 1、软管的有效期2-3年需要更换(时间长了会老化,变硬,承受压力变小,容易爆炸)
  • 2、软管的长度不能大于2米,并不得有接口(长度和弯折、拉伸、脚踏、龟裂、老化等风险成正比)
  • 3、软管不得穿墙(不利于排查隐患,而且水泥墙体会腐蚀软管,就是说即使破了个洞你也发现不了)

看了下现在家里的情况是,煤气罐放在橱柜下面,通过二分软管,一根连接煤气灶,一根连接热水器,且两个软管都穿墙。听房东说房子90年代装修的,看来这两根软管也有20多年没换过了。

隐患存在,立马解决,用气安全,危及生命。解决方案是,既然换不了埋在墙里的软管,干脆舍弃不用。第一步在橱柜上方开个孔,用新的软管直连煤气罐和煤气灶。第二步在卫生间新增一个煤气罐,走明路,用新的软管直连热水器。这样做的缺点是需要租用两个煤气罐,软管在外不美观;优点是利于更换软管,用气安全,人身安全。

2018年4月20日星期五

Python循环解析文件夹下XML文件,并将结果插入到SQLServer数据库

需求如下:A、B两台服务器分别在内外网,B服务器取A服务器上数据库中的数据,需要通过XML报文传输数据,A服务器生成XML报文,B服务器拿到XML报文解析入库。

需求分析:

A服务器发送过来的XML报文源源不断地放到B服务器上的以下目录:D:\test中

  • 1、程序遍历test目录,得到目录中所有XML文件路径
  • 2、解析XML文件
  • 3、将解析结果插入SQLServer数据库

以上三步的实现参见以下三篇文章:

Python遍历文件夹中文件操作Python使用XPath解析XML文档Python使用pymssql连接SQLServer数据库

只需把三步串起来就能实现需求了,额外增加以下内容:

  • 1、解析完一个XML文件,需要把它从目录中移走(备份)
  • 2、程序常驻内存,永远在执行,不退出,增加休眠时间

完整的代码如下:

import os,shutilfrom lxml import etreeimport pymssqlfrom datetime import datetimeimport timerootdir = 'D:/test'def mssql(sql):    conn=pymssql.connect(host='.',user='sa',password='test',database='test')    '''    如果和本机数据库交互,只需修改链接字符串    conn=pymssql.connect(host='.',database='Michael')    '''    cur=conn.cursor()        cur.execute(sql)    conn.commit()        cur.close()    conn.close()def ReadXML(path):    tree = etree.parse(path)    root = tree.getroot()    for child in root:        try:            NO=child.xpath('./NO/text()')[0]            STEP_CODE=child.xpath('./STEP_CODE/text()')[0]            MARK=child.xpath('./MARK/text()')[0]            INSERT_DATE=datetime.now().strftime('%Y-%m-%d %H:%M:%S')        except Exception as e:              print(e,"XML读取失败")        try:            sql="insert into HEAD VALUES('"+NO +"','"+STEP_CODE+"','"+MARK+"',''"+INSERT_DATE+"')"            #插入数据库                        mssql(sql)          except Exception as e:              print(e,"数据插入失败")    dstfile=rootdir+"/bak/"#备份目录    try:        shutil.move(path,dstfile)#移动文件     except Exception as e:        print(e)   def main():        #列出文件夹下所有的目录与文件    l = os.listdir(rootdir)         for i in range(len(l)):            path = os.path.join(rootdir,l[i])            if os.path.isfile(path):                   path=path.replace("\\", "/")                                      ReadXML(path)if __name__=="__main__":    while True:        main()        print("开始抓取")        time.sleep(15)#休眠15秒

Python循环解析文件夹下XML文件,并将结果插入到SQLServer数据库

需求如下:A、B两台服务器分别在内外网,B服务器取A服务器上数据库中的数据,需要通过XML报文传输数据,A服务器生成XML报文,B服务器拿到XML报文解析入库。

需求分析:

A服务器发送过来的XML报文源源不断地放到B服务器上的以下目录:D:\test中

  • 1、程序遍历test目录,得到目录中所有XML文件路径
  • 2、解析XML文件
  • 3、将解析结果插入SQLServer数据库

以上三步的实现参见以下三篇文章:

Python遍历文件夹中文件操作Python使用XPath解析XML文档Python使用pymssql连接SQLServer数据库

只需把三步串起来就能实现需求了,额外增加以下内容:

  • 1、解析完一个XML文件,需要把它从目录中移走(备份)
  • 2、程序常驻内存,永远在执行,不退出,增加休眠时间

完整的代码如下:

import os,shutilfrom lxml import etreeimport pymssqlfrom datetime import datetimeimport timerootdir = 'D:/test'def mssql(sql):    conn=pymssql.connect(host='.',user='sa',password='test',database='test')    '''    如果和本机数据库交互,只需修改链接字符串    conn=pymssql.connect(host='.',database='Michael')    '''    cur=conn.cursor()        cur.execute(sql)    conn.commit()        cur.close()    conn.close()def ReadXML(path):    tree = etree.parse(path)    root = tree.getroot()    for child in root:        try:            NO=child.xpath('./NO/text()')[0]            STEP_CODE=child.xpath('./STEP_CODE/text()')[0]            MARK=child.xpath('./MARK/text()')[0]            INSERT_DATE=datetime.now().strftime('%Y-%m-%d %H:%M:%S')        except Exception as e:              print(e,"XML读取失败")        try:            sql="insert into HEAD VALUES('"+NO +"','"+STEP_CODE+"','"+MARK+"',''"+INSERT_DATE+"')"            #插入数据库                        mssql(sql)          except Exception as e:              print(e,"数据插入失败")    dstfile=rootdir+"/bak/"#备份目录    try:        shutil.move(path,dstfile)#移动文件     except Exception as e:        print(e)   def main():        #列出文件夹下所有的目录与文件    l = os.listdir(rootdir)         for i in range(len(l)):            path = os.path.join(rootdir,l[i])            if os.path.isfile(path):                   path=path.replace("\\", "/")                                      ReadXML(path)if __name__=="__main__":    while True:        main()        print("开始抓取")        time.sleep(15)#休眠15秒

2018年4月19日星期四

Python遍历文件夹中文件操作

以下代码实现遍历D盘test文件夹下的所有文件,得到所有文件的路径。为防止Windows下转义字符的干扰,文件路径改为反斜杠/的形式,使用path=path.replace(“\\”, “/”)将得到的文件路径转换为反斜杠形式。

import osrootdir = 'D:/test'#列出文件夹下所有的目录与文件list = os.listdir(rootdir)for i in range(0,len(list)):path = os.path.join(rootdir,list[i])if os.path.isfile(path):path=path.replace("\\", "/")print(path)

Python遍历文件夹中文件操作

以下代码实现遍历D盘test文件夹下的所有文件,得到所有文件的路径。为防止Windows下转义字符的干扰,文件路径改为反斜杠/的形式,使用path=path.replace(“\\”, “/”)将得到的文件路径转换为反斜杠形式。

import osrootdir = 'D:/test'#列出文件夹下所有的目录与文件list = os.listdir(rootdir)for i in range(0,len(list)):path = os.path.join(rootdir,list[i])if os.path.isfile(path):path=path.replace("\\", "/")print(path)

Python使用pymssql连接SQLServer数据库

一、下载对应Python版本的pymssql包

pymssql包的名字一般如下pymssql-2.1.4.dev5-cp36-cp36m-win_amd64.whl,其中cp36代表Python3.6版。

二、安装pymssql包

开始-运行-CMD-pip install E:\Downloads\pymssql-2.1.4.dev5-cp36-cp36m-win_amd64.whl

三、连接SQLServer数据库(以下查询需要先建立数据库)

import pymssqlconn=pymssql.connect(host='10.0.0.1',user='sa',password='test',database='test')'''如果和本机数据库交互,只需修改链接字符串conn=pymssql.connect(host='.',database='Michael')'''cur=conn.cursor()cur.execute('select * from test')#如果update/delete/insert记得要conn.commit()#否则数据库事务无法提交#conn.commit()print (cur.fetchall())cur.close()conn.close()

Python使用pymssql连接SQLServer数据库

一、下载对应Python版本的pymssql包

pymssql包的名字一般如下pymssql-2.1.4.dev5-cp36-cp36m-win_amd64.whl,其中cp36代表Python3.6版。

二、安装pymssql包

开始-运行-CMD-pip install E:\Downloads\pymssql-2.1.4.dev5-cp36-cp36m-win_amd64.whl

三、连接SQLServer数据库(以下查询需要先建立数据库)

import pymssqlconn=pymssql.connect(host='10.0.0.1',user='sa',password='test',database='test')'''如果和本机数据库交互,只需修改链接字符串conn=pymssql.connect(host='.',database='Michael')'''cur=conn.cursor()cur.execute('select * from test')#如果update/delete/insert记得要conn.commit()#否则数据库事务无法提交#conn.commit()print (cur.fetchall())cur.close()conn.close()

Python使用XPath解析XML文档

XPath(XML Path Language)是一种小型的查询语言:

1)可在XML中查找信息

2)支持HTML的查找

3)通过元素和属性进行导航

python开发使用XPath条件:

由于XPath属于lxml库模块,所以首先要安装库lxml

XPath的使用方法:

首先讲一下XPath的基本语法知识:

四种标签的使用方法

1) // 双斜杠 定位根节点,会对全文进行扫描,在文档中选取所有符合条件的内容,以列表的形式返回。

2) / 单斜杠 寻找当前标签路径的下一层路径标签或者对当前路标签内容进行操作。

3) /text() 获取当前路径下的文本内容。

4) /@xxxx 提取当前路径下标签的属性值

5) | 可选符 使用|可选取若干个路径 如//p | //div 即在当前路径下选取所有符合条件的p标签和div标签

6) . 点 用来选取当前节点

7) .. 双点 选取当前节点的父节点

注:以下代码在Python3.6.1下调试通过

一、Python读取XML简单实例

from lxml import etreetext = """<data>    <country name="Liechtenstein">        <rank>1</rank>        <year>2008</year>        <gdppc>141100</gdppc>        <neighbor name="Austria" direction="E"/>        <neighbor name="Switzerland" direction="W"/>    </country>    <country name="Singapore">        <rank>4</rank>        <year>2011</year>        <gdppc>59900</gdppc>        <neighbor name="Malaysia" direction="N"/>    </country>    <country name="Panama">        <rank>68</rank>        <year>2011</year>        <gdppc>13600</gdppc>        <neighbor name="Costa Rica" direction="W"/>        <neighbor name="Colombia" direction="E"/>    </country></data>"""root = etree.XML(text)for child in root:   print(child.tag, child.attrib)   print('rank',child.xpath('./rank/text()')[0])   print('year', child.xpath('./year/text()')[0])   print('gdppc', child.xpath('./gdppc/text()')[0])   print('neighbor', child.xpath('./neighbor/@name')[0])

二、Python读取本地XML简单实例

如果XML文档存放在本地,可以文件对象打开xml就读取成字符串类型,也可以直接tree = etree.parse(“D:/lujing/test.xml”)读取。

etree.parse("D:/lujing/test.xml")from lxml import etreetree = etree.parse("D:/lujing/test.xml")root = tree.getroot()for child in root:   print(child.tag, child.attrib)   print('rank',child.xpath('./rank/text()')[0])   print('year', child.xpath('./year/text()')[0])   print('gdppc', child.xpath('./gdppc/text()')[0])   print('neighbor', child.xpath('./neighbor/@name')[0])

三、为防止读取XML出错导致程序退出,可使用try捕获异样

from lxml import etreetree = etree.parse("D:/lujing/test.xml")root = tree.getroot()root = etree.XML(text)for child in root:   try:       print(child.tag, child.attrib)       print('rank',child.xpath('./rank/text()')[0])       print('year', child.xpath('./year/text()')[0])       print('gdppc', child.xpath('./gdppc/text()')[0])       print('neighbor', child.xpath('./neighbor/@name')[0])       print('neighbor', child.xpath('./neighbor/@name')[1])   except Exception as e:        print(e)

Python使用XPath解析XML文档

XPath(XML Path Language)是一种小型的查询语言:

1)可在XML中查找信息

2)支持HTML的查找

3)通过元素和属性进行导航

python开发使用XPath条件:

由于XPath属于lxml库模块,所以首先要安装库lxml

XPath的使用方法:

首先讲一下XPath的基本语法知识:

四种标签的使用方法

1) // 双斜杠 定位根节点,会对全文进行扫描,在文档中选取所有符合条件的内容,以列表的形式返回。

2) / 单斜杠 寻找当前标签路径的下一层路径标签或者对当前路标签内容进行操作。

3) /text() 获取当前路径下的文本内容。

4) /@xxxx 提取当前路径下标签的属性值

5) | 可选符 使用|可选取若干个路径 如//p | //div 即在当前路径下选取所有符合条件的p标签和div标签

6) . 点 用来选取当前节点

7) .. 双点 选取当前节点的父节点

注:以下代码在Python3.6.1下调试通过

一、Python读取XML简单实例

from lxml import etreetext = """            1        2008        141100                                4        2011        59900                        68        2011        13600                    """root = etree.XML(text)for child in root:   print(child.tag, child.attrib)   print('rank',child.xpath('./rank/text()')[0])   print('year', child.xpath('./year/text()')[0])   print('gdppc', child.xpath('./gdppc/text()')[0])   print('neighbor', child.xpath('./neighbor/@name')[0])

二、Python读取本地XML简单实例

如果XML文档存放在本地,可以文件对象打开xml就读取成字符串类型,也可以直接tree = etree.parse(“D:/lujing/test.xml”)读取。

etree.parse("D:/lujing/test.xml")读取。from lxml import etreetree = etree.parse("D:/lujing/test.xml")root = tree.getroot()for child in root:   print(child.tag, child.attrib)   print('rank',child.xpath('./rank/text()')[0])   print('year', child.xpath('./year/text()')[0])   print('gdppc', child.xpath('./gdppc/text()')[0])   print('neighbor', child.xpath('./neighbor/@name')[0])

三、为防止读取XML出错导致程序退出,可使用try捕获异样

from lxml import etreetree = etree.parse("D:/lujing/test.xml")root = tree.getroot()root = etree.XML(text)for child in root:   try:       print(child.tag, child.attrib)       print('rank',child.xpath('./rank/text()')[0])       print('year', child.xpath('./year/text()')[0])       print('gdppc', child.xpath('./gdppc/text()')[0])       print('neighbor', child.xpath('./neighbor/@name')[0])       print('neighbor', child.xpath('./neighbor/@name')[1])   except Exception as e:        print(e)

2018年4月2日星期一

2018年续费NameSilo域名

如果不是收到NameSilo的邮件,我都忘了域名续费的事情了,时间过得好快啊,一年一度掏腰包的时间又到了。

稍微在网上找了NameSilo续费优惠码,没有找到可用的,翻看去年NameSilo续费的价格也是8.99美元,看来几乎没有可用的NameSilo续费优惠码了,即使花费时间找到也就优惠1美元,也就作罢,直接原价续费吧。

同样是8.99美元,今年支付的人民币比去年便宜5块多钱,看来人民币又升值了。

写这篇文章的目的就是明年续费的时候看一下,今年的域名续费价格如下:

Domains 卖家:NameSilo, LLC
汇率:1.00 USD = 6.30323000 CNY
8.99 USD| 56.67 CNY