逐步完善中。

#!/usr/bin/python3
# -*- coding: utf-8 -*- import os
import codecs #支持多国语言的编码解码
import chardet # 自动判别侦听文件字符集类型 class FileUtil:
"""
File Operation Tool
-----------------------
+ api link
+ [Python File(文件) 方法 - 菜鸟教程](https://www.runoob.com/python/file-methods.html)
+ [Python 文件I/O - 菜鸟教程](https://www.runoob.com/python/python-files-io.html)
+ default encoding:utf-8
+ methods
+ writeFile(filePath,data,encoding='utf-8')
+ writeFileByCover(filePath,data,encoding='utf-8')
+ writeFileByAppend(filePath,data,encoding='utf-8')
+ fileSwitchEncode(filePath,oldEncodeCharset,newEncodeCharset='utf-8')
+ fileCharset(filePath)
+ readFileNBytes(filePath,startPosition=0,readByteSize=1000,encoding='utf-8')
+ readFileNLines(filePath,startLine=0,lineSize=10,encoding='utf-8')
+ readFile(filePath,encoding='utf-8')
+ getAlllFilesPathOfCurrentDirectory(file_dir=None) 获取当前路径下的所有文件
+ getAllSubDirsOfCurrentDirectory(file_dir=None) 获取当前路径下的所有子目录(一级子目录)
+ printAllFile(file_dir) 打印指定路径下的所有文件、目录
"""
def writeFile(filePath,data,encoding='utf-8'):
FileUtil.writeFileByCover(filePath,data,encoding); # 默认覆盖
pass;
# 通过覆盖的方式写入新数据
# + 打开一个文件用于读写。
# + 如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。
# + 如果该文件不存在,创建新文件。
def writeFileByCover(filePath,data,encoding='utf-8'):
with open(filePath,'w',encoding=encoding) as file:
file.write(data);
file.flush(); # 主动刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。
file.close();
pass;
# 如果文件存在,则通过从原文件结尾处添加新数据的方式写入
# + 打开一个文件用于追加。
# + 如果该文件已存在,文件指针将会放在文件的结尾。
# + 也就是说,新的内容将会被写入到已有内容之后。
# + 如果该文件不存在,创建新文件进行写入。
def writeFileByAppend(filePath,data,encoding='utf-8'):
with open(filePath,'a',encoding=encoding) as file:
file.write(data);
file.flush(); # 主动刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。
file.close();
pass;
# 文件编码转换
### path = r"C:\Users\千千寰宇\Desktop\text.txt";
### FileUtil.fileSwitchEncode(path,'gbk','utf-8');
def fileSwitchEncode(filePath,oldEncodeCharset,newEncodeCharset='utf-8'):
data = '';
newData = '';
newFileTmpPath = filePath+".tmp";
if os.path.exists(newFileTmpPath) == True: #存在:删除其内容
os.remove(newFileTmpPath); # 删除已存在的临时文件
print("[fileSwitchEncode] Remove temporary file '",newFileTmpPath,"' successfully!");
pass;
newFile = codecs.open(newFileTmpPath,'a',encoding=newEncodeCharset); #a:文件末尾追加 + 写
with codecs.open(filePath,"r",encoding=oldEncodeCharset) as file:
data = file.readlines();
for line in data:
newFile.write(line.encode(newEncodeCharset).decode(newEncodeCharset));# gbk,utf-8
pass;
file.close();
newFile.close();
#删除 原file
os.remove(filePath);
os.rename(newFileTmpPath, filePath);# os.rename(src,dist) #将临时文件路径命名为 原file的名字
pass; def fileCharset(filePath): #获得文件的字符集类型
tmpFile = open(filePath,'rb');
data = tmpFile.read(90)
tmpFile.close()
print(chardet.detect(data));
return chardet.detect(data)["encoding"]; # 形如:gbk,utf-8
pass; def readFileNBytes(filePath,startPosition=0,readByteSize=1000,encoding='utf-8'): #读取从第startPosition字节处开始的readByteSize字节的文件数据
data = '';
if startPosition < 0:
startPosition = 0;
pass;
if readByteSize < 1:
readByteSize = 100;
pass;
with open(filePath,'r',encoding=encoding) as f:
f.seek(startPosition); # startPosition即偏移字节位置
data = f.read(readByteSize);
f.close();
pass;
return data;
pass; def readFileNLines(filePath,startLine=0,lineSize=10,encoding='utf-8'): #读取从第startLine行开始的lineSize行文件数据
data = '';
i = 0; #记录当前所处行数
line = None;
endLineSize = startLine + lineSize;
with open(filePath,'r',encoding=encoding) as f:
print ("[FileUtil.readFileNLines] file name: ", f.name)
line = f.readline();
while (line!=None) and (i < startLine):
line=None;
line = f.readline();
i+=1;
pass;
print("current line[",i,"] line:",line); # test
while (line!=None) and (i<endLineSize):
# print ("[FileUtil.readFileNLines] 第 %d 行 - %s" % (i+1, line)); # test
data += line;
line=None;
line = f.readline();
i+=1;
pass;
f.close();
return data;
pass; def readFile(filePath,encoding='utf-8'):
#data = '';
#try:
#f = open(filePath, 'r',encoding='utf-8');
## print(f.read());
#for line in f:
# #print(line);
# data +=line;
# pass;
#finally:
#if f:
#f.close();
#pass;
#pass;
with open(filePath,'r',encoding=encoding) as file:
data = file.read()
return data;
pass; def getAlllFilesPathOfCurrentDirectory(file_dir=None):#获取当前路径下的所有文件
"""
获取当前路径下的所有文件
------------------------
即 不包含子目录下的文件和子目录
:file_dir:必须为存在的目录路径,不得为文件路径
:return 文件名数组,形如:['DatabaseUtil.py', 'FileUtil.py', 'PageRank.py', 'poms.ipynb', 'Test.ipynb', 'textrank.ipynb', 'Untitled.ipynb']
"""
L=[];
for root, dirs, files in os.walk(file_dir):
L.append(files);
# print(files) #当前路径下所有非目录子文件
pass
# print(L); # test
return L[0]; def getAllSubDirsOfCurrentDirectory(file_dir=None):#获取当前路径下的所有子目录(一级子目录)
"""
获取当前路径下的所有子目录(一级子目录)
------------------------
即 不包含子目录下的文件和子目录
:file_dir:必须为存在的目录路径,不得为文件路径
:return 子目录数组,形如:['.ipynb_checkpoints', '__pycache__']
"""
L=[];
for root, dirs, files in os.walk(file_dir):
L.append(dirs);
# print(files) #当前路径下所有非目录子文件
pass
# print(L); # test
return L[0]; def printAllFile(file_dir): #打印指定路径下的所有文件、目录
L=[];
for root, dirs, files in os.walk(file_dir):
print("root:",root) #当前目录路径
print("dirs:",dirs) #当前路径下所有子目录
print("files:",files) #当前路径下所有非目录子文件
# for file in files:
# if os.path.splitext(file)[1] == '.jpeg': # 指定特定类型的文件
# L.append(os.path.join(root, file))
# pass;
# pass;
# return L;
pass pass; # end class

Python之文件操作工具的更多相关文章

  1. Python读写文件

    Python读写文件1.open使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. file_object = open('t ...

  2. python计算文件的md5值

    前言 最近要开发一个基于python的合并文件夹/目录的程序,本来的想法是基于修改时间的比较,即判断文件有没有改变,比较两个文件的修改时间即可.这个想法在windows的pc端下测试没有问题. 但是当 ...

  3. python操作文件案例二则

    前言 python 对于文件及文件夹的操作. 涉及到 遍历文件夹下所有文件 ,文件的读写和操作 等等. 代码一 作用:查找文件夹下(包括子文件夹)下所有文件的名字,找出 名字中含有中文或者空格的文件 ...

  4. Python :open文件操作,配合read()使用!

    python:open/文件操作 open/文件操作f=open('/tmp/hello','w') #open(路径+文件名,读写模式) 如何打开文件 handle=open(file_name,a ...

  5. python学习 文件操作

    一.python打开文件 #=====================python 文件打开方式 open()===================== # open(fileName,type) t ...

  6. Python之文件读写

    本节内容: I/O操作概述 文件读写实现原理与操作步骤 文件打开模式 Python文件操作步骤示例 Python文件读取相关方法 文件读写与字符编码 一.I/O操作概述 I/O在计算机中是指Input ...

  7. python 遍历文件夹 文件

    python 遍历文件夹 文件   import os import os.path rootdir = "d:\data" # 指明被遍历的文件夹 for parent,dirn ...

  8. python检测文件的MD5值

    python检测文件的MD5值MD5(单向散列算法)的全称是Message-Digest Algorithm 5(信息-摘要算法),经MD2.MD3和MD4发展而来.MD5算法的使用不需要支付任何版权 ...

  9. Python编码/文件读取/多线程

    Python编码/文件读取/多线程 个人笔记~~记录才有成长   编码/文件读取/多线程 编码 常用的一般是gbk.utf-8,而在python中字符串一般是用Unicode来操作,这样才能按照单个字 ...

随机推荐

  1. Android异常与性能优化相关面试问题-bitmap面试问题详解

    recycle: 对于Bitmap来说内存分为Java内存和Native内存,而当图片不用时建议调用一下recycle()方法来将native层的内存进行回收,下面看一下它的源码官方对它的解释: LR ...

  2. java WebSocket HTML页面

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 用 D3.js 画一个手机专利关系图, 看看苹果,三星,微软间的专利纠葛

    前言 本文灵感来源于Mike Bostock 的一个 demo 页面 原 demo 基于 D3.js v3 开发, 笔者将其使用 D3.js v5 进行重写, 并改为使用 ES6 语法. 源码: gi ...

  4. 自动生成SSM框架

    使用idea 新创建项目 然后 新创建 java .resources 文件夹...... 图上是项目结构 java文件夹下的 文件夹 命名规范 com.nf147(组织名)+ oukele(作者) ...

  5. 数据库中char和varchar的区别

    1. char类型的长度是固定的,varchar的长度是可变的. 这就表示,存储字符串'abc',使用char(10),表示存储的字符将占10个字节(包括7个空字符) 使用varchar2(10),, ...

  6. 使用Quartus进行功能仿真时出现“testbench_vector_input_file option does not exist”的解决方法

    环境:本人使用的Quartus 18 Prime Standard Edition 1.新建一个vmf文件 ​ 添加Node或者Bus ​ 2.点击Processing->Start->S ...

  7. 网页分享到微信、微博、QQ空间、百度贴吧等

    1.首先说明的是,pc端微信分享只能通过二维码来分享. 2.下面是js代码. //分享到新浪微博 function shareToSinaWB(event){ event.preventDefault ...

  8. jquery live()方法 语法

    jquery live()方法 语法 作用:live() 方法为被选元素附加一个或多个事件处理程序,并规定当这些事件发生时运行的函数.通过 live() 方法附加的事件处理程序适用于匹配选择器的当前及 ...

  9. react-native-swiper的Github地址

    https://github.com/liyinglihuannan/react-native-swiper https://www.jianshu.com/p/4dba338ef37a(中文版

  10. VirtualBox:启动虚拟机后计算机死机

    造冰箱的大熊猫@cnblogs 2018/2/21 故障描述:Ubuntu 16.04升级Linux内核后,在VirtualBox中启动虚拟机发现Ubuntu死机,只能通过长按电源开关硬关机的方式关闭 ...