逐步完善中。

#!/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

最新文章

  1. virtualbox中centos系统配置nat+host only上网
  2. AngularJS 中设置 AJAX get 请求不缓存的方法
  3. (旧)子数涵数&#183;Flash——路径补间
  4. .Net 自己写个简单的 半 ORM (练手)
  5. 190. Reverse Bits
  6. HDU 4921 Map
  7. facade pattern
  8. vector,list,deque
  9. MySQL启动相关知识
  10. 数字图像处理(MATLAB版)学习笔记(1)——第1章 绪言
  11. Linux - gcc 的简易用法 (编译、参数与链结)
  12. Java中实现多线程的四种方式
  13. mysql删除表结构中的“关键字”字段
  14. APP下载在微信无法打开 该如何处理
  15. type-of-python作业-判断字符串是否属于回文需要忽略其中的标点、空格与大小写
  16. .net core2 单元测试
  17. C# 简单POST请求 同时防止中文乱码的出现
  18. 关于php查询mongodb限制返回字段的问题
  19. 9. 一个list拆分成多个list返回
  20. Project facet jst.web.jstl has not been defined.

热门文章

  1. Hdu 1851 Nim+巴什博弈
  2. 在ASP.NET MVC项目中使用极验验证(geetest)
  3. 部署dashboard
  4. 一键生成 dao service serverImpl controller 层
  5. MariaDB(MySql)使用储存过程和随机函数插入10万条数据
  6. puppet完全攻略(二)让puppet代码支持vim高亮显示
  7. for update的作用和用法
  8. Python之阿姆斯特朗数
  9. ansible基本模块
  10. 坚果Pro2刷魔趣系统教程,刷回锤子系统教程