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 压缩解压缩操作
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基础操作以及hdfs操作相关推荐
- Python新建文件夹的方法
python新建文件夹的方法很简单 #引入os import os #判断path文件夹是否存在 print(os.path.exists(path)) 结果为布尔型,True/False #新增文件 ...
- IdealU 中使用python新建文件时没有SDK文件解决方法
IdealU 中使用python新建文件时没有SDK文件解决方法 1.下载Anaconda3-2019文件,下载完成后安装时点击下一步安装成功. 2.配置环境变量. 3.在CMD中输入python.出 ...
- python新建文件夹代码_Python文件夹与文件的操作实现代码
有关文件夹与文件的查找,删除等功能 在 os 模块中实现.使用时需先导入这个模块, 导入的方法是: import os 一.取得当前目录 s = os.getcwd() # s 中保存的是当前目录(即 ...
- python怎么创建txt文件夹_python怎么创建一个txt文件/python创建文件夹基础教程
python怎么创建一个txt文件 python怎么创建一个txt文方法. 如考: 1.首先内置的空闲编辑器进行编辑(单击并选择copy),如下图所示. 2.您可以下载记事本和其他编辑软件,以支持多种 ...
- python新建文件夹和文件夹_Python创建文件夹与文件的快捷方法
前言 Python快捷创建文件夹和文件详解 自己做文件时发现 简单的反复操作十分浪费时间,于是想到了 使用Python,这个分享给大家,快捷高效办公. 项目目录 file11 创建文件夹 file2 ...
- Python新建文件夹
import osos.mkdir('OS-Demo-2') os.makedirs('OS-Demo-3/sub-Dir-1') os.mkdir()和os.makedirs()都可以新建文件夹,区 ...
- python 怎么建立文件夹_如何用PYTHON新建文件夹
1 打开JUPYTER NOTEBOOK,新建一个空白的PY文档. 2 import os 首先必须要引入os模块,这是在处理系统的事宜. 3 os.getcwd() 用这个方法就可以得知当前文档所在 ...
- python 新建文件 hdfs_大数据学习(六):Python操作hdfs(包括追加数据文件到hdfs文件)...
#!coding:utf-8 import sys from hdfs.client import Client #设置utf-8模式 reload(sys) sys.setdefaultencodi ...
- python新建数值_1.3NumPy:创建和操作数值数据
Cloga:这份文档是euroscipy关于Python科学计算资源的一个教程.英文版地址为:http://scipy-lectures.github.io/,是学习Python科学计算生态体系很好的 ...
最新文章
- 集合框架(List的三个子类的特点)
- 如何在WORD中设置标题1与标题2编号样式不一样
- 基于StringTemplate的视图
- dnf 跨服 服务器 位置,dnf2017跨区表_2017dnf90级版本跨区表_快吧游戏
- 项目管理基础:系统评价相关知识
- react textarea 空格为什么不换行_你需要的 React + TypeScript 50 条规范和经验
- 通俗易懂的SpringBoot教程---day2---Springboot配置文件
- 再谈节奏与动力---平淡与枯燥的力量
- linux-vim-可视行模式
- 三行代码实现冒泡排序算法
- 解决Python安装后目录下缺失Scripts文件夹
- 美通企业日报 | 阿迪发布星战系列球鞋;安进27亿美元收购百济神州20.5%股份
- Android 动画
- CentOS install btsync
- 不错的离线IP地址定位库
- 求四边形最大内接矩形,一种不规则多边形的最大内接矩形的快速近似求解方法与流程...
- CSS限制字数,超出部份显示点点点...
- 使用随机森林做特征选择
- 《途客圈创业记:不疯魔,不成活》一一2.2 种子融资
- MFC应用程序单文档及类向导的使用
热门文章
- HTML作业-保护环境-保护地球
- mysql 同一字段分别统计,mysql查询同一个字段根据不同值分组成不同列统计
- python爬虫beautifulsoup_python爬虫beautifulsoup解析html方法
- 动感灯箱制作流程培训_从事广告行业20年老师傅,揭秘广告牌类型和制作工艺流程 !...
- python widnows mysql_python用Windows开发配置mysql数据库
- java for循环前面label_Java 实例
- 鼠标在滑块上滚轮控制_高速直线运动导轨—滚轮直线导轨
- mysql导入的excel更新_excel导入数据库,存在则更新不存在添加
- beanshell字符串替换_必知必会的操作Jmeter(十六)_beanshell实现字符串加密
- 基础编程题之二进制插入(位运算)