`

python学习与实战

阅读更多

       恬好这几天有空,下去学习了python 脚本语言,给我的感觉是:超级shell脚本语言.

       如果你已经有java/javascript语言基础,下去参考<python简明教程> ,估计三两天就可以熟识语法了.当然 python 还包含了许多的模块,包括 面向过程开发/面向对象开发/多线程/web开发/文件处理等等,这些相关模拟当然需要根据实际情况再进行深入学习了.

       根据不同的需求以及不同的情况,不同的公司对其有不同的用法.大的可以用其做一些服务端主程/管理后台/web开发,小的可以用其进行日常运维工具.

 

       关于python的语法学习就不多说了,可以根据下述这两个电子书进行自学,三五天快速阅读(记性不好的,可以中途多搞一下文档上面的例子)

          <python简明教程> http://sebug.net/paper/python/index.html

          <python 手册> http://man.chinaunix.net/develop/python/python2.3tut/tut

 

        通过两天的python语法学习,再加个小项目以加固对python的理解.

        要求:替换文件夹中所有xls文件的内容 .

        输入:文件夹路径/需替换的key&value

 

 

  • 技术预研

     python编辑 xls 文件,其中一种方式是通过xlrd/xlwt/xlutils.

     Python中一般使用xlrdexcel read)来读取Excel文件,使用xlwtexcel write)来生成Excel文件(可以控制Excel中单元格的格式),需要注意的是,用xlrd读 取excel是不能对其进行操作的:xlrd.open_workbook()方法返回xlrd.Book类型,是只读的,不能对其进行操作。而 xlwt.Workbook()返回的xlwt.Workbook类型的save(filepath)方法可以保存excel文件。

因此对于读取和生成Excel文件都非常容易处理,但是对于已经存在的Excel文件进行修改就比较麻烦了。不过,还有一个xlutils(依赖于xlrdxlwt)提供复制excel文件内容和修改文件的功能。其实际也只是在xlrd.Bookxlwt.Workbook之间建立了一个管道而已,如下图:

 
   

        但如果要对一个文件进行编辑,这个就有点扯蛋了.按目前我的理解是:

      所谓的编辑 xls 文件,就是copy一个副本出来,并对副本进行业务编辑处理,处理结束后再进行另存为保存结果(又或者直接保存到原文件进行覆盖,而并非是直接编辑原文件. )

      另外,目前遇到个问题,且未能解决:这里copy出来的副本,没办法把原文件中所包含的脚本/图片等资源,也一并复制过来.因此这样的结果是:如果文件中包含有一张图片,这样编辑过后的结果文件里面是没有插图的.

 

     xlrd/xlwt/xlutils各模块,可以到官网下载本地进行安装 .

 

  • 下载

下载地址:http://www.python-excel.org/

官网地址:http://www.python-excel.org/

文档地址:https://secure.simplistix.co.uk/svn/xlrd/trunk/xlrd/doc/xlrd.html

文档pdf下载:http://www.simplistix.co.uk/presentations/python-excel.pdf

 

  • 安装

1.linux体系:(其他各模块安装与 下述xlrd模块安装一样)

 

$> cd xlrd-0.7.1
$> python setup.py install

 

  • 操作

python操作excel除了读就是写。

xlrd (主要负责读取xls内容,不能更改内容 )

http://pypi.python.org/pypi/xlrd

 

导入

import xlrd

 

打开excel

file = xlrd.open_workbook('demo.xls')

 

查看文件中包含sheet的名称

file.sheet_names()

 

得到第一个工作表,或者通过索引顺序 或 工作表名称

sheet = file.sheets()[0]

sheet = file.sheet_by_index(0)

sheet = file.sheet_by_name(u'Sheet1')

 

获取行数和列数

nrows = sheet.nrows

ncols = sheet.ncols

 

循环行,得到索引的列表

for rownum in range(sheet.nrows):

print sheet.row_values(rownum)

 

获取整行和整列的值(数组)

sheet.row_values(i)

sheet.col_values(i)

 

单元格(索引获取)

cell_A1 = sheet.cell(0,0).value

cell_C4 = sheet.cell(2,3).value

 

分别使用行列索引

cell_A1 = sheet.row(0)[0].value

cell_A2 = sheet.col(1)[0].value

 

 

 

 

xlwt (主要负责写xls内容 )

http://pypi.python.org/pypi/xlrd

 

导入xlwt

import xlwt

 

新建一个excel文件

file = xlwt.Workbook() #注意这里的Workbook首字母是大写,无语吧

 

新建一个sheet

sheet = file.add_sheet('sheet name')

 

通过索引获取一个已存在的sheet

sheet = file.get_sheet('sheet name')

 

写入数据sheet.write(,,value)

sheet.write(0,0,'test')

 

如果对一个单元格重复操作,会引发

returns error:

# Exception: Attempt to overwrite cell:

# sheetname=u'sheet 1' rowx=0 colx=0

 

所以在打开时加cell_overwrite_ok=True解决

sheet = file.add_sheet('sheet name',cell_overwrite_ok=True)

 

保存文件

file.save('demo.xls')

 

 

 

  • 项目实战

 

        要求:替换文件夹中所有xls文件的内容 .

        输入:文件夹路径/需替换的key&value

 

          源码注释已经较为清晰了,可复制本地直接运行.另该脚本只是简单处理,只作功能实现,未对其他异常进行处理,如 文件夹中包含有 txt 等文件时的情况处理.

#!/usr/local/python
#filename:replaceFile.py
# -*- coding:utf-8 -*-
import os
import os.path
import xdrlib ,sys
import xlrd
import xlwt
import xlutils
from xlutils.copy import copy

#
# 方法:根据keyValue字典数据,对文件 ffile 进行内容替换处理
#
def parseFile(ffile,keyValue):
	print "Begin parse file:",ffile
	# 1 字符串替换需在同一编码下进行,保存的数据需以unicode编码保存字符串
	#
	#strobj.decode("cp936") -------->将s解码成unicode,参数指定的是s本来的编码方式。这个和unicode(s,encodename)是一样的。
	#strobj.encode("utf-8")-------->将unicode编码成str对象,参数指定使用的编码方式
	#
	#
	##formatting_info=True保存之前数据的格式,表示一并把样式也打开,以便下述进行copy时把样式也复制过去
	wb = xlrd.open_workbook(ffile,formatting_info=True)
	#这个太扯蛋了,所谓的编辑 xls 文件,就是copy一个复本出来,并对复本进行编辑过后,再进行另存为(或者直接保存到原文件进行覆盖).而没法直接编辑原文件.
	#但这样的copy,却没法把原文件里面的脚本 / 图片 等一并拿出来,导致没法把这些资源转到目标文件中.
	t_wb = copy(wb)
	for sheetid in range(wb.nsheets):
		sh = wb.sheet_by_index(sheetid)
		for rownum in range(sh.nrows):
			for colnum in range(sh.ncols):
				cellvalue = sh.cell(rownum,colnum).value
				try:
					#从xls读取下来的字符串,有str unicode  两种编码串.因此需转换成同一编码(本demo是统一转成utf-8)再进行 find replace 操作.
					cellvalue = getValue(cellvalue)
					for keytemp,valuetemp in keyValue.items():
						if isinstance(cellvalue,str) and cellvalue.find(keytemp) != -1:
							cellvalue = cellvalue.replace(keytemp,valuetemp)
							#写入数据时,str需转换成 unicode编码格式
							t_wb.get_sheet(sheetid).write(rownum,colnum,unicode(cellvalue,"utf-8"))
				except EOFError:
					print "error"
				except Exception,x:
					print "数据类型转换失败.type:",type(value),",value:",value
					print x
					print "Fail parse file."
					return 

	t_wb.save(ffile)
	print "End parse file!\n\n"


def getValue(value):
	if isinstance(value,unicode):
		return value.encode("utf-8")
	elif isinstance(value,int):
		return float(value)
	else:
		return value


#程序从这里开始运行
if __name__== "__main__" :
	#数据目录
	dataDir = ""
	#文件列表
	fileArray = []
	#替换字符串
	keyValue = {}

	dataDir = raw_input("Please input the datadir:")
	while(True):
		key = raw_input("Please input the key:")
		value = raw_input("Please input the value:")
		keyValue[key] = value
		quit = raw_input("Please input 'quit' to quit,or other to continue:")
		if quit == 'quit':
			break
	
	print "\n\n######## Message ########"
	print "dataDir:",dataDir
	print "keyValue",keyValue
	print "\n\n#########################"

	print "\n\n#########################"
	print "Begin search the Dir of all file "
	#parent 是指dataDir各层子目录 
	#dirnames 是指  parent 当层下的所有子目录
	#filenames 是指 parent 当层下的所有文件
	for parent,dirnames,filenames in os.walk(dataDir):
		for filename in filenames:
			fileArray.append(os.path.join(parent,filename))
	print "There are",len(fileArray)," files.";
	print "##########################\n\n"


	for filename in fileArray:
		parseFile(filename,keyValue)

 

 

  • 大小: 57.3 KB
分享到:
评论

相关推荐

    Python机器学习编程与实战_PPT课件.rar

    《Python机器学习编程与实战》课程的PPT课件涵盖了从Python基础知识到机器学习实践的广泛内容,旨在帮助学习者掌握Python在数据处理和机器学习领域的应用。以下是对每个章节主要内容的详细阐述: 1. **第1章 Python...

    Python深度学习实战——基于Pytorch全书电子教案完整版ppt整套教学课件最全教学教程.pptx

    Python深度学习实战——基于Pytorch全书电子教案完整版ppt整套教学课件最全教学教程.pptx

    53253-Python机器学习编程与实战-习题数据和答案.rar.rar

    《Python机器学习编程与实战-习题数据和答案》这个压缩包文件,正如其名,是针对Python机器学习的学习资源,包含习题的数据和解答,是深入理解和掌握Python机器学习技术的重要辅助材料。通过这份资源,学习者可以...

    Python数据分析实战 内利著 学习笔记

    Python数据分析实战 内利著 学习笔记 Python数据分析实战 内利著 学习笔记 Python数据分析实战 内利著 学习笔记 Python数据分析实战 内利著 学习笔记 Python数据分析实战 内利著 学习笔记 Python数据分析实战 内利著...

    Python入门与实战

    Python入门与实战 ppt,基础知识概览,适合培训讲义,或入门学习大纲

    基于PyTorch的Python深度学习实战源码

    项目概述:《Python深度学习实战:基于PyTorch》 本项目采用Python语言编写,致力于提供一套完整的深度学习实战源码。项目包含总计14363个文件,其中主要包括以下类型: - Python脚本文件(.py):79个,包含核心...

    python 项目开发实战 陈强 源码

    《Python项目开发实战》通过12个大型项目的实现过程展示了开发Python项目的方法和流程。全书共12章,分别讲解了AI人机对战版五子棋游戏(AI pygame 实现),在线商城系统(Django Mezzanine Cartridge 实现),房产价格...

    Python_深度学习实战:75个有关神经网络建模、强化学习与迁移学习的解决方案.zip

    本资料包"Python_深度学习实战:75个有关神经网络建模、强化学习与迁移学习的解决方案"提供了全面的实践指导,旨在帮助读者掌握深度学习的核心概念和技术。 首先,神经网络建模是深度学习的基础。一个神经网络由...

    Python与机器学习实战

    《Python与机器学习实战》这份资料详尽地涵盖了在数据科学领域中,使用Python语言进行机器学习实践的各种关键知识点。Python作为一门易学且功能强大的编程语言,因其丰富的库支持和简洁的语法,成为了机器学习领域的...

    Python深度学习实战——基于Pytorch-ppt.zip

    《Python深度学习实战——基于PyTorch》是一份详尽的教学资料,主要涵盖了使用Python和PyTorch进行深度学习的基本概念、技术与实践。PyTorch是Facebook开发的一个开源机器学习库,它提供了动态计算图的功能,使得...

    Python机器学习实战-数据&代码.rar

    在本资源"Python机器学习实战-数据&代码.rar"中,我们可以期待深入探索Python语言在机器学习领域的应用。这个压缩包包含的是与机器学习相关的数据集以及配套的代码,为学习者提供了一手的实践经验。Python是当今最...

    Python实战案例合集

    总的来说,"Python实战案例合集"是一份全面的学习资源,它将帮助你从基础到进阶,从理论到实践,全方位提升Python技能,特别是在机器学习和数据分析方面。通过深入学习和不断练习,你将能够运用Python解决实际问题,...

    Python数据分析实战源代码

    Python数据分析实战源代码是针对那些想要深入理解和应用Python进行数据处理和分析的初学者和专业人士的宝贵资源。这个综合性的教程共分为六个章节,每个章节都涵盖了数据分析过程中的一个重要环节,确保学习者能够...

    Python机器学习编程与实战_源代码和实验数据.rar

    《Python机器学习编程与实战》是一本专注于Python在机器学习领域的应用教程,旨在帮助读者从零基础开始,逐步掌握Python编程以及机器学习的基本概念、算法和技术。这份压缩包包含的资源,如源代码和实验数据,是辅助...

    python 高效开发实战

    《Python高效开发实战——Django、Tornado、Flask、Twisted》分为3部分:第1部分是基础篇,带领初学者实践Python开发环境和掌握基本语法,同时对网络协议、Web客户端技术、数据库建模编程等网络编程基础深入浅出地...

    Python-Python元学习实战随书代码

    Python元学习实战是一种高级的机器学习技术,它涉及学习如何学习,使得模型能够从不同的任务中提取通用性,从而在新任务上表现出更强的适应性和性能。这本书《Python元学习实战》提供了丰富的代码示例,帮助读者深入...

    Python金融大数据风控建模实战:基于机器学习源代码+文档说明

    Python金融大数据风控建模实战:基于机器学习源代码+文档说明Python金融大数据风控建模实战:基于机器学习源代码+文档说明Python金融大数据风控建模实战:基于机器学习源代码+文档说明Python金融大数据风控建模实战...

    Python3数据分析与机器学习实战——随书PPT

    《Python3数据分析与机器学习实战——随书PPT》这套资料涵盖了从Python基础知识到高级机器学习应用的全方位教程。通过各个章节的PPT,我们可以深入理解Python在数据分析和机器学习领域的强大功能。 首先,让我们从...

    Python项目开发实战 源代码

    这个压缩包中的"Python项目开发实战 (源代码)"提供了丰富的实例,让你能够深入学习Python的实际应用。以下是基于这些资源可能涵盖的一些核心知识点: 1. **基础语法**:Python的基础语法包括变量、数据类型(如...

    python 高效开发实战源代码+pdf

    通过对Python及其周边Web框架的学习和实践,你就可以成为这样的全能型人才。本书分为3部分:第1部分是基础篇,带领初学者实践Python开发环境和掌握基本语法,同时对网络协议、Web客户端技术、数据库建模编程等网络...

Global site tag (gtag.js) - Google Analytics