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可以看成数学意义上的无序和无重复元素的集合,因此,两 ...
随机推荐
- 0-1背包问题蛮力法求解(c++版本)
// 0.1背包求解.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #define ...
- 深入理解MySql子查询IN的执行和优化
IN为什么慢? 在应用程序中使用子查询后,SQL语句的查询性能变得非常糟糕.例如: SELECT driver_id FROM driver where driver_id in (SELECT dr ...
- SQL Server-聚焦在视图和UDF中使用SCHEMABINDING(二十六)
前言 上一节我们讨论了视图中的一些限制以及建议等,这节我们讲讲关于在UDF和视图中使用SCHEMABINDING的问题,简短的内容,深入的理解,Always to review the basics. ...
- C++整数转字符串的一种方法
#include <sstream> //ostringstream, ostringstream::str() ostringstream stream; stream << ...
- MFC单文档程序添加HTML帮助支持
1.在App类 构造函数中添加 EnableHtmlHelp(); 2.在Frame类中,添加消息影射: ON_COMMAND(ID_HELP_FINDER, CFrameWnd::OnHelpFin ...
- psoc学习
第一是:项目的路径需要放在Documents and Settings\,也就是默认的文件夹的地方,不然会报错错误范例为:Question:CY8CKIT-023 kit example projec ...
- jquery-treegrid树状表格的使用(.Net平台)
上一篇介绍了DataTable,这一篇在DT的基础之上再使用jquery的一款插件:treegrid,官网地址:http://maxazan.github.io/jquery-treegrid/ 一. ...
- javaScript中的小细节-script标签中的预解析
首先介绍预解析,虽然预解析字面意思很好理解,但是却是出坑出的最多的地方,也是bug经常会有的地方,利用好预解析的特性可以解决很多问题,并且提高代码的质量及数量,浏览器在解析代码前会把变量的声明和函数( ...
- Ognl表达式基本原理和使用方法
Ognl表达式基本原理和使用方法 1.Ognl表达式语言 1.1.概述 OGNL表达式 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,他是一个 ...
- 续 CentOS7(mini) 运行MVC5 + Mariadb
上一篇,介绍了在CentOS7上使用mono官方二进制安装包快速安装mono环境 并且成功运行了一个Owin自宿主应用(Booker) 由于Owin自宿主应用不需要System.Web的支持,所以可以 ...