目录

  1. 前言
  2. 基础操作
  3. hdfs操作
  4. 总结

一、前言

       作为一个全栈工程师,必须要熟练掌握各种语言。。。HelloWorld。最近就被“逼着”走向了python开发之路,大体实现的功能是写一个通用类库将服务器本地存储的文件进行简单清洗后转储到HDFS中,所以基本上python的相关知识都涉及到了,这里对一些基础操作以及hdfs操作做一总结,以备查阅。

二、基础操作

2.1 字符串操作

       字符串操作应该是所有语言的基础。python基本上也提供了其他语言常用的一些字符串处理函数,常用的如下:

1、startswith 以某个字符串起始

2、endswith 以某个字符串结尾

3、contain python没有提供contain函数,可以使用 'test' in somestring 的方式来进行判断,当然也可以使用index来判断

4、strip 去除空格及特殊符号

5、len 判断字符串长度len(str)

6、upper lower 大小写转换

7、split 分隔字符串

2.2 文件操作

       文件以及文件夹操作也是写程序中经常用到的功能。python中文件操作常用的有以下函数。

1、walk 用于递归遍历文件夹,获取所有文件。

2、os.path 文件、文件夹路径等操作。

       对文件操作进行了简单的封装,代码如下,仅供参考:

def isFile(name):
return os.path.isfile(name) def isDir(name):
return os.path.isdir(name) def getDirPath(filename):
return os.path.dirname(filename) def getFilename(path):
return os.path.basename(path) def getExt(filename):
return os.path.splitext(filename)[1] def changeExt(filename, ext):
if not ext.startswith('.'):
ext = '.' + ext
return getFilenameWithoutExt(filename) + ext def getDirAndFileNameWithoutExt(filename):
return os.path.splitext(filename)[0] def getFilenameWithoutExt(filename):
return getFilename(getDirAndFileNameWithoutExt(filename)) def deleteFileOrFolder(path):
try:
if isFile(path):
os.remove(path)
elif isDir(path):
shutil.rmtree(path)
# or os.rmdir(path)
except:
pass

2.3 压缩解压缩操作

可以参考http://blog.csdn.net/luoshengkim/article/details/46647423

1、tar.gz

       压缩、解压.tar.gz文件可以直接使用tarfile包,首先引入:import tarfile。解压缩操作如下:

tar = tarfile.open(path, 'r:gz')
file_names = tar.getnames()
for file_name in file_names:
tar.extract(file_name, path)
tar.close()

       压缩操作如下:

tar = tarfile.open(tarpath, 'w:gz')
if isFile(srcpath):
tar.add(srcpath, arcname=srcpath)
elif isDir(srcpath):
for root, dir, files in os.walk(srcpath):
for file in files:
fullpath = os.path.join(root, file)
tar.add(fullpath, arcname=file)
tar.close()

       tarfile.open的mode有以下种,每种对应不同的方式,需要根据自己需要选取:

mode action
'r' or 'r:*' Open for reading with transparent compression (recommended).
'r:' Open for reading exclusively without compression.
'r:gz' Open for reading with gzip compression.
'r:bz2' Open for reading with bzip2 compression.
'a' or 'a:' Open for appending with no compression. The file is created if it does not exist.
'w' or 'w:' Open for uncompressed writing.
'w:gz' Open for gzip compressed writing.
'w:bz2' Open for bzip2 compressed writing.

2、gz

       压缩、解压.gz文件可以直接使用gzip包,首先引入:import gzip。解压缩操作如下:

fname = path.replace('.gz', '').replace('.GZ', '')
gfile = gzip.GzipFile(path)
open(fname, 'wb').write(gfile.read())
gfile.close()

       压缩操作如下:

gfile = gzip.GzipFile(srcpath + '.gz', mode='w')
gfile.write(open(srcpath, 'rb').read())
gfile.close()

       此处同样需要注意mode的选取,并且还要注意解压缩的时候创建解压缩文件时的mode。

3、zip

       压缩、解压.zip文件可以直接使用zipfile包,首先引入:import zipfile。解压缩操作如下:

zip_file  = zipfile.ZipFile(path, mode='r')
for name in zipfile.namelist():
zip_file.extract(name, getFilenameWithoutExt(path))
zip_file.close()

       压缩操作如下:

zip_file  = zipfile.ZipFile(zippath, mode='w')
if isFile(srcpath):
zip_file.write(srcpath, arcname=srcpath)
elif isDir(srcpath):
for root, dir, files in os.walk(srcpath):
for file in files:
fullpath = os.path.join(root, file)
zip_file.write(fullpath, arcname=file)
zip_file.close()

三、hdfs操作

       hdfs操作采用hdfs3库,这是c语言写的libhdfs库的python封装版,基本能满足常用的hdfs操作。

3.1 引入hdfs3

       只需要知道namenode的地址以及端口号即可,代码如下:

from hdfs3 import HDFileSystem
hdfs = HDFileSystem(host='namenode', port=8020)

3.2 建立文件夹

       如果想要上传文件等到hdfs,必须保证其文件夹存在,否则会报错,此时就可以先创建文件夹,只需要使用hdfs.mkdir(dir)即可,并且此命令会递归创建文件夹,即不需要一层层的创建不存在的文件夹。

3.3 上传文件

       上传文件的时候只需要指定本地文件地址以及hdfs中存储地址即可,hdfs地址也需要包含文件名,命令为hdfs.put(localfile, remotefile)。

3.4 hdfs操作封装

       同样将我封装的hdfs操作代码封装如下:

def mkdir(remotepath):
if not exists(remotepath):
hdfs.mkdir(dir) def get(remotepath, localpath):
if exists(remotepath):
hdfs.get(remotepath, localpath) def put(localfile, remotefile):
dir = getDirPath(remotefile)
mkdir(dir)
hdfs.put(localfile, remotefile) def exists(remotepath):
return hdfs.exists(remotepath) def delete(remotepath):
if exists(remotepath):
hdfs.rm(remotepath, recursive=True)

四、总结

       本文简单总结了python的部分常用基础操作以及hdfs操作,最后还要说明一点,对这种非强类型的语言,在定义变量名称以及传入参数的时候一定要小心,否则会出现一些莫名其妙的错误。

python基础操作以及hdfs操作的更多相关文章

  1. 第三章:Python基础の函数和文件操作实战

    本課主題 Set 集合和操作实战 函数介紹和操作实战 参数的深入介绍和操作实战 format 函数操作实战 lambda 表达式介绍 文件操作函数介紹和操作实战 本周作业 Set 集合和操作实战 Se ...

  2. python学习笔记-(七)python基础--集合、文件操作&函数

    本节内容 1.集合操作 2.文件操作 3.字符编码与转码 4.函数操作 1.集合操作 集合是一个无序的.不重复的数据组合: 1.1 常用操作 它的作用是: 1)自动去重:列表变成集合,自动去重: &g ...

  3. python基础学习笔记——文件操作

    文件操作 初始文件操作 使用Python来读写文件是非常简单的操作,我们使用open()函数来打开一个文件,获取到文件句柄,然后通过文件句柄就可以进行各种各样的操作了 根据打开方式的不同能够执行的操作 ...

  4. python基础之os模块操作

    # os模块 目录相关内置库import os# . 当前目录 .. 返回上一级目录# 1. os.path.abspath() --获取当前文件的绝对路径(不包含os模块.py) pwd# path ...

  5. python 基础之文件读操作

    创建一个名为‘尘曦’的文件内容如下 Hadoop是一个由Apache基金会所开发的分布式系统基础架构. 用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和存储. ...

  6. python基础学习之文件操作&函数

    1.文件处理相关 1.编码问题 ①python2与python3中的默认编码: py2默认使用ASCII码,py3默认使用utf-8 ②为什么会出现中文乱码,中文乱码的情况有哪些? #sys.stdo ...

  7. python基础知识-day7(文件操作)

    1.文件IO操作: 1)操作文件使用的函数是open() 2)操作文件的模式: a.r:读取文件 b.w:往文件里边写内容(先删除文件里边已有的内容) c.a:是追加(在文件基础上写入新的内容) d. ...

  8. Python基础7:文件操作

    [ 文件操作] 1 对文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 现有文件如下: 昨夜寒蛩不住鸣. 惊回千里梦,已三更. 起来独自绕阶行. 人悄悄,帘外月胧 ...

  9. Python自动化 【第三篇】:Python基础-集合、文件操作、字符编码与转码、函数

    1.        集合 1.1      特性 集合是一个无序的,不重复的数据组合,主要作用如下: 去重,把一个列表变成集合实现自动去重. set可以看成数学意义上的无序和无重复元素的集合,因此,两 ...

随机推荐

  1. c#与java的区别

    经常有人问这种问题,用了些时间java之后,发现这俩玩意除了一小部分壳子长的还有能稍微凑合上,基本上没什么相似之处,可以说也就是马甲层面上的相似吧,还是比较短的马甲... 一般C#多用于业务系统的开发 ...

  2. AutoMapper:Unmapped members were found. Review the types and members below. Add a custom mapping expression, ignore, add a custom resolver, or modify the source/destination type

    异常处理汇总-后端系列 http://www.cnblogs.com/dunitian/p/4523006.html 应用场景:ViewModel==>Mode映射的时候出错 AutoMappe ...

  3. 利用CSS中的:after、: before制作的边三角提示框

    小颖昨天分享了一篇参考bootstrap中的popover.js的css画消息弹框今天给大家再分享一篇使用:before和:after伪元素画消息弹框的CSS. 画出来是介个酱紫的: 有没有觉得画的萌 ...

  4. mybatis_基础篇

    一.认识mybatis: MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改 ...

  5. 《你不知道的JavaScript》整理(四)——原型

    一.[[Prototype]] JavaScript中的对象有一个特殊的[[Prototype]]内置属性,其实就是对于其他对象的引用. var myObject = { a: 2 }; myObje ...

  6. 要想提高PHP的编程效率,你必须知道的要点

    1.当操作字符串并需要检验其长度是否满足某种要求时,你想当然地会使用strlen()函数.此函数执行起来相当快,因为它不做任何计算,只返回在zval 结构(C的内置数据结构,用于存储PHP变量)中存储 ...

  7. linux centos中添加删除修改环境变量,设置java环境变量

    前言 安装完软件必要添加环境变量.指令很少,然而长时间不写就会不自信:我写的对吗?于是百度开始,于是发现又是各有千秋.好吧,好记星不如烂笔头.当然,最重要的是,百度出来的都他妈的是如何添加环境变量,只 ...

  8. jQuery的属性

    The Write Less , Do More ! jQuery的属性 1. attr(name|properties|key,value|fn) : 设置或返回被选元素的属性值 ①获取属性 < ...

  9. ORACLE从共享池删除指定SQL的执行计划

    Oracle 11g在DBMS_SHARED_POOL包中引入了一个名为PURGE的新存储过程,用于从对象库缓存中刷新特定对象,例如游标,包,序列,触发器等.也就是说可以删除.清理特定SQL的执行计划 ...

  10. MongoDB学习笔记四—增删改文档下

    $slice 如果希望数组的最大长度是固定的,那么可以将 $slice 和 $push 组合在一起使用,就可以保证数组不会超出设定好的最大长度.$slice 的值必须是负整数. 假设$slice的值为 ...