AeroenGinEEK
An engineering student pretends to be a geek.
rss
email
twitter
renren
  • Home

SUSE Linux Enterprise Server 10 升级小记

0 Comments
Posted on 十二月 19 2010

       一直盘算着将cluster上的SUSE Linux Enterprise Server 10 SP2升级一番,经过艰苦卓绝地无数番折腾,现在总算是成功将节点1和节点2上的SP2升级到了SP3,虽然现实残酷地表明这只是一次小幅升级(Kernel版本只新了7个月),但出于自我安慰,特此发帖庆祝。

        若是有Internet连接或能物理接触服务器的话,直接使用在线升级或CD Patch方式升级将是再简单不过的事情了,直接重启引导进入到安装界面操作即可。不过由于学院的cluster只供数值计算内需,并且我又没有物理接触机器的权限,所以只能寻思通过局域网远程操作进行升级了。由于之前发生过一次误用init 1,导致服务器进入单用户模式再次无法连接的事故,所以在方法选择上看到需要reboot重新引导的大多直接跳过了。Google多次发现只有官方的doc里比较详细的讲了如何进行各种方式的Update问题(终究是官方文档靠谱啊,而且写得极有条理和人性化,不得不暗暗佩服Novell),其中讲到的使用SSH或VNC通过PXE boot & Wake-on-LAN的方式进行远程升级的方法就可以实现reboot后保持连接,不过方法比较繁琐,需要利用一台server设置DHCP和TFTP服务,并且我在按部就班进行操作的过程中被TFTP安装问题折腾的死去活来,最终不了了之。由于在之前使用yast试图利用iso镜像进行升级时,总是会遇到找不到/repodata/repomd.xml的错误,后来发现所有SLES11的iso镜像(包括安装盘和sdk media盘)里都没有repomd.xml这个文件,所以今天突然心血来潮,就想退而求其次试试能不能用SLES10 SP3的镜像把现在的SP2升级到SP3(官方doc里也建议升级幅度不宜太大,最好每次只升级到下一个发布版本)。使用yast2的Add-On Product加载SLES10的镜像时发现在patches文件下就有repodata文件夹,遂大喜,调整路径加载之,随后便能成功进入package的选择界面。不过此时进入安装就会提示找不到相应的软件包,把patches文件夹下的所有文件拷贝到CD1目录下重新导入repomd.xml文件即可。

       另外,发现Xmanager在调用X windows时确实比vnc viewer要好多了,不会出现界面无法控制的问题,窗口看着也比较舒服,不过对于一般的命令操作,vnc要小巧灵活得多啦。


Tags: linux  cluster 
Categories:

使用Python操作excel数据表程序两例

0 Comments
Posted on 十一月 12 2010

        上次被导师派到学位办去帮忙解决两个excel问题,感觉用excel 的vba编程应该不难实现,但鉴于对VB以及相应的excel函数都不熟悉,就考虑能不能用python解决,Google一番后发现用python实现excel的操作还是比较方便的,遂将问题与解决方法整理如下,以备不时之需。

        问题一:根据某数据表名册(假设名为sample.xls)中“身份证号”列的值,从所有(以身份证号命名)的学生照片中筛选出名册中所包含学生的照片来。

       解决的思路比较简单,就是先读取“身份证号”到一个list中,然后到存放照片的源文件夹中查找相应文件名的jpg文件,找到后将其拷贝到另一位置即可。关键问题就是如何使用python读取excel里的数据,google到的方法有以下三种:

       1.使用pywin32扩展包中的win32com.client模块,利用COM接口实现对office系列软件的操作(关于COM见这里,更进一步了解可见“Python Programming on Win32”)。实现对excel的操作实例见这里。

       2.使用xlrd扩展包,该扩展包主要用于读取数据表,特点是使用简单,跨平台(win32com.client只能在win32下使用),操作示例可见这里。

       3.使用PyExcelerator扩展包,PyExcelerator功能较xlrd强大些,可以用来生成或改写数据表,操作示例可见这里。

由于待解决的问题只涉及数据的读取,所以为简单起见,使用xlrd扩展,程序如下(程序比较简单,就不多注释了):

 

'''
用于读取Excel数据并查找拷贝文件
D:\pic为jpg输入源文件夹,D:\pic2为jpg输出文件夹
by NingLM
2010.10.19
'''
import xlrd,os,sys,shutil
pic_scr="D:\\pic\\"
pic_dst="D:\\pic2\\"
fname = "E:\\sample.xls"
bk = xlrd.open_workbook(fname)
sh = bk.sheet_by_name("Sheet2")

nrows = sh.nrows
ncols = sh.ncols

row_list = []
for i in range(1,nrows):
    row_data = sh.row_values(i)
    data2=row_data[2]
    row_list.append(data2)
for t in range(len(row_list)):
    num=row_list[t]
    pic=pic_scr+str(num)+".jpg"
    if os.path.exists(pic):
        shutil.copy(pic,pic_dst)
    else:
        print t+2,"名为",str(num),"的照片不存在"

 

        问题二:根据某一数据总表(Sheet1)里的(正确)数据对另一数据表里(Sheet2)对应学号的相应数据项进行校对。

      一点说明:其实Sheet2是Sheet1的子集,Sheet1的数据由学校的学生信息数据库直接导出,基本不存在错误,Sheet2只包含部分获得学位的学生信息,信息为后期录入,可能存在较多错误以及格式问题,故需进行校对并对格式规范化。

       解决的思路是先将Sheet1和Sheet2的数据分别存到list1和list2里(调用xrld读取表中数据),然后根据list2里的“学号”信息到list1进行查找,找到后逐项比较其他各项信息(姓名、 身份证号等),将不一致的信息输出。

      需要注意的问题是如何实现对应信息的比较,因表中各项数据以字符串的形式存储,两个相同的字符串可能因为编码方式不同而无法直接比较,所以要先统一编码后才能比较(程序中使用unicode()函数统一编码为unicode,关于python字符串编码问题可参考这里)。另一方面,由于从数据库导出的同一类型数据具有固定的长度,若字符串未达到该长度则会追加空格,所以在比较的时候还需要忽略空格对字符串的影响。

      最后可用的python代码如下,为了使代码更易实现,需要先对原数据表进行一定的排版处理,具体操作见注释。

 

'''
用于校对Excel数据项

程序使用说明:
1.使用程序前分别将原数据和待校对的数据放在E:\\sample.xls里的Sheet1和Sheet2
2.将Sheet1和Sheet2的各列一一对应
3.设置所有数据格式为文本
4.第一行为分类名称,第一列为序号,第二列为学号

by NingLM
2010.10.25
'''

import xlrd,os,sys,shutil

fname = "E:\\sample.xls"  #数据存放的位置
sheet1_name="Sheet1" #存放正确数据的数据表名称
sheet2_name="Sheet2" #存放待检查数据的数据表名称

bk = xlrd.open_workbook(fname)
sh1 = bk.sheet_by_name(sheet1_name)
sh2 = bk.sheet_by_name(sheet2_name)

nrows1 = sh1.nrows
ncols1 = sh1.ncols
nrows2 = sh2.nrows
ncols2 = sh2.ncols

#内容比较函数
def str_equal(str1,str2):
    str1=unicode(str1)    #统一编码形式为unicode
    str2=unicode(str2)
    len1=len(str1)
    len2=len(str2)
    if len1==len2:
        return (str1==str2)
    else:                 #忽略空格等多余字符影响
        len0=min(len1,len2)
        return (str1[:len0]==str2[:len0])

#读取数据
row_list1 = []
for i in range(0,nrows1):
    data1 = sh1.row_values(i)
    row_list1.append(data1)

row_list2 = []
for j in range(0,nrows2):
    data2 = sh2.row_values(j)
    row_list2.append(data2)

#根据学号查找源项(学号在第二列)
count=0 #计数
find=0 #是否找到源项
for i in range(1,nrows2):
    for j in range(1,nrows1):
        if str_equal(row_list1[j][1],row_list2[i][1]):
            find=1
            for m in range(1,ncols2):
                if not str_equal(row_list2[i][m],row_list1[j][m]):
                    count=count+1
                    print count,sheet2_name,"中第",i+1,"行的",
                    print(row_list2[0][m]),":"
                    print(row_list2[i][m]),"不同于",sheet1_name,"中第",j+1,"行的:"
                    fix=row_list1[j][m]
                    print fix,"\n"
    if find==0:
        print "第",
        print(row_list2[i][0]),"行学号不存在!"
        count=count+1
    else:
        find=0
print "校对完毕,共发现"+str(count)+"处错误!"

 

 

 


Tags: python  excel 
Categories:

继续test

0 Comments
Posted on 十一月 9 2010

总算有惊无险地考完了总体设计,继续test。

这次主要test用blog发牢骚,顺带配置WindownsLiveWriter。

一想到上个blog在hello了无数次world后就被“二三其德”的我无情抛弃的情景,我就不禁对AeroenGinEEK的命运感到深深地担忧,看来以后一定要常磕各类精神鸦片心灵鸡汤维持亢奋的输出状态才行哪……

目前AeroenGinEEK的主要配置工作(小幅度折腾各*.css、*.js、*.html)已经完成,剩下一堆嗷嗷待抓的Bugs就待以后茶余饭后慢慢消遣了。

待会还有节CATIA的课,物理上不打算去了,精神上向往一下,据说讲装配了,我得赶紧完成作业才是。

字数差不多了,再配个图测试综合效果,图与内容无关。

cylinder1


Tags: blog  test 
Categories:

代码加亮测试

0 Comments
Posted on 十一月 7 2010

 

import sys
if 1==1:
    print "ok!"

 

 


Tags: python 
Categories:

Hello World!

0 Comments
Posted on 十一月 4 2010
Hello World (..更多内容)

Tags: test 
Categories:


About Me

Feeds

  • Entries (RSS)
  • Comments (RSS)
  • 订阅到 Google Reader
  • 订阅到 抓虾
  • 订阅到 鲜果
  • 订阅到 QQ

Popular Posts

  • SUSE Linux Enterprise Server 10 升级小记(492)
  • 使用Python操作excel数据表程序两例(327)
  • Hello World!(173)
  • 继续test(161)
  • 代码加亮测试(134)

Recent Posts

  • SUSE Linux Enterprise Server 10 升级小记
  • 使用Python操作excel数据表程序两例
  • 继续test
  • 代码加亮测试
  • Hello World!

Recent Comments

Categories

Archives

  • December 2010(1)
  • November 2010(4)

Blog roll

  • RED|Red On The Road
  • susong69|Susie's blog

  • Home
  • Login
Powered by Google App Engine  |   Designed by WebTreats  |   由 xuming 提供 Micolog程序
本站作品采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。
转载请注明来自AeroeGinEEK
知识共享许可协议