专栏首页点滴积累python基础操作以及hdfs操作

python基础操作以及hdfs操作

一、前言

       作为一个全栈工程师,必须要熟练掌握各种语言。。。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操作,最后还要说明一点,对这种非强类型的语言,在定义变量名称以及传入参数的时候一定要小心,否则会出现一些莫名其妙的错误。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • geotrellis使用(三十一)使用geotrellis直接将GeoTiff发布为TMS服务

    前言 传统上我们需要先将Tiff中存储的影像等数据先切割成瓦片,而后再对外提供服务。这样的好处是服务器响应快,典型的用空间来换时间的操作。然而这样造成的问题是空...

    魏守峰
  • PhiloGL学习(5)——神说要有光,便有了光

    前言 上一篇文章中介绍了如何创建三维对象及加载皮肤,本文为大家介绍如何为场景添加光源。 一、 原理分析 光在任何地方都是非常重要的,无论在哪里都说是要发光发热,...

    魏守峰
  • geotrellis使用(十七)使用缓冲区分析的方式解决单瓦片计算边缘值问题

    Geotrellis系列文章链接地址http://www.cnblogs.com/shoufengwei/p/5619419.html 目录 前言 需求分析 ...

    魏守峰
  • OpenStack环境搭建1(先电版)

    OpenStack先电版搭建系列教程由五部分组成,该部分为第一步环境搭建步骤,其他部分请在本站查找相关内容

    Weiyang
  • MySQL锁

    select * from table_name where .....lock in share mode

    jeanron100
  • 物联网智能硬件设备常见攻击方法

    以太网接入型设备,一般分为网线或WiFi两种。不管是WiFi还是网线,可以通过局域网抓包、笔记本WiFi桥接抓包等等手段。 最著名的抓包软件 Wireshark...

    大石头
  • Python 编码规范

    目前我们公司的自动化,大部分是以 Python 语言为主,但是经常发现,不同人的编写风格都不尽相同,所以我就给自己制定了一套规则,至少从我自己做起,保持自己的编...

    sylan215
  • 中国无人车公司AutoX,打响加州RoboTaxi服务第一枪

    刚刚,加州发出第二张自动驾驶车路试运营牌照(Autonomous Vehicle Pilot Permits),AutoX成为继Zoox之后第二家获此牌照的无人...

    量子位
  • tf.convert_to_tensor

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    于小勇
  • TLS加密远程连接Docker

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    程序员欣宸

扫码关注云+社区

领取腾讯云代金券