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操作,最后还要说明一点,对这种非强类型的语言,在定义变量名称以及传入参数的时候一定要小心,否则会出现一些莫名其妙的错误。
python基础操作以及hdfs操作的更多相关文章
- 第三章:Python基础の函数和文件操作实战
本課主題 Set 集合和操作实战 函数介紹和操作实战 参数的深入介绍和操作实战 format 函数操作实战 lambda 表达式介绍 文件操作函数介紹和操作实战 本周作业 Set 集合和操作实战 Se ...
- python学习笔记-(七)python基础--集合、文件操作&函数
本节内容 1.集合操作 2.文件操作 3.字符编码与转码 4.函数操作 1.集合操作 集合是一个无序的.不重复的数据组合: 1.1 常用操作 它的作用是: 1)自动去重:列表变成集合,自动去重: &g ...
- python基础学习笔记——文件操作
文件操作 初始文件操作 使用Python来读写文件是非常简单的操作,我们使用open()函数来打开一个文件,获取到文件句柄,然后通过文件句柄就可以进行各种各样的操作了 根据打开方式的不同能够执行的操作 ...
- python基础之os模块操作
# os模块 目录相关内置库import os# . 当前目录 .. 返回上一级目录# 1. os.path.abspath() --获取当前文件的绝对路径(不包含os模块.py) pwd# path ...
- python 基础之文件读操作
创建一个名为‘尘曦’的文件内容如下 Hadoop是一个由Apache基金会所开发的分布式系统基础架构. 用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和存储. ...
- python基础学习之文件操作&函数
1.文件处理相关 1.编码问题 ①python2与python3中的默认编码: py2默认使用ASCII码,py3默认使用utf-8 ②为什么会出现中文乱码,中文乱码的情况有哪些? #sys.stdo ...
- python基础知识-day7(文件操作)
1.文件IO操作: 1)操作文件使用的函数是open() 2)操作文件的模式: a.r:读取文件 b.w:往文件里边写内容(先删除文件里边已有的内容) c.a:是追加(在文件基础上写入新的内容) d. ...
- Python基础7:文件操作
[ 文件操作] 1 对文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 现有文件如下: 昨夜寒蛩不住鸣. 惊回千里梦,已三更. 起来独自绕阶行. 人悄悄,帘外月胧 ...
- Python自动化 【第三篇】:Python基础-集合、文件操作、字符编码与转码、函数
1. 集合 1.1 特性 集合是一个无序的,不重复的数据组合,主要作用如下: 去重,把一个列表变成集合实现自动去重. set可以看成数学意义上的无序和无重复元素的集合,因此,两 ...
随机推荐
- Logstash实践: 分布式系统的日志监控
文/赵杰 2015.11.04 1. 前言 服务端日志你有多重视? 我们没有日志 有日志,但基本不去控制需要输出的内容 经常微调日志,只输出我们想看和有用的 经常监控日志,一方面帮助日志微调,一方面及 ...
- 多个Img标签之间的间隙处理方法
1.多个标签写在一行 <img src="/i/eg_tulip.jpg" alt="郁金香" height="100px"/> ...
- Go web开发初探
2017年的第一篇博客,也是第一次写博客,写的不好,请各位见谅. 本人之前一直学习java.java web,最近开始学习Go语言,所以也想了解一下Go语言中web的开发方式以及运行机制. 在< ...
- [译]处理文本数据(scikit-learn 教程3)
原文网址:http://scikit-learn.org/stable/tutorial/text_analytics/working_with_text_data.html 翻译:Tacey Won ...
- Supermap iCloudManager -负载均衡
Supermap icm负载均衡理解: 应用场景:地图出图 子节点1和子节点2中的服务保持一致,一般情况下设置的是匿名用户通过nginx访问服务信息,所以不需要登录. 1.通过nginx分发请求,(轮 ...
- ubuntu15.04 nginx1.6.5 配置虚拟主机
1 在/etc/hosts 添加host 2 在/etc/nginx/nginx.conf中查看http里的include ****** /*.conf的路径,在此路径下添加一个新的******. ...
- Node.js Express连接mysql完整的登陆注册系统(windows)
windows学习环境: node 版本: v0.10.35 express版本:4.10.0 mysql版本:5.6.21-log 第一部分:安装node .Express(win8系统 需要&qu ...
- Java泛型的历史
为什么Java泛型会有当前的缺陷? 之前的章节里已经说明了Java泛型擦除会导致的问题,C++和C#的泛型都是在运行时存在的,难道Java天然不支持“真正的泛型”吗? 事实上,在Java1.5在200 ...
- Leetcode 笔记 101 - Symmetric Tree
题目链接:Symmetric Tree | LeetCode OJ Given a binary tree, check whether it is a mirror of itself (ie, s ...
- 细说websocket - php篇
下面我画了一个图演示 client 和 server 之间建立 websocket 连接时握手部分,这个部分在 node 中可以十分轻松的完成,因为 node 提供的 net 模块已经对 socket ...