逐步完善中。

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

    RNN 的 BP —— Back Propagation Through Time. 参考:零基础入门深度学习(5) - 循环神经网络.知乎. 1 def backward(self, sensiti ...

  2. sql关联查询更新速度慢的问题

    原语句 update B b set b.fid = (select f.id from F f where f.bid = b.id) ; 可以考虑用 begin for f in (select ...

  3. 记录微信小程序里自带 时间格式 工具

    微信小程序里面自己给了一个时间工具,是用来记录log日志,感觉可以记录下来,所以拿来自己用,以此记录: 直接传入 日期对象 进入 formatTime //得到下面格式的时间格式2017/07/22 ...

  4. 前端 OSS 自动化部署脚本

    部署脚本 (deploy.js 自己命名) const co = require('co') const OSS = require('ali-oss') const path = require(' ...

  5. css-滚动条常用的样式修改

    // ::-webkit-scrollbar { /*滚动条整体样式*/// width: 10px; /*宽分别对应竖滚动条的尺寸*/// height: 5px; /*高分别对应横滚动条的尺寸*/ ...

  6. jQuery.getScript(url, [callback])

    jQuery.getScript(url, [callback]) 概述 通过 HTTP GET 请求载入并执行一个 JavaScript 文件.大理石平台精度等级 jQuery 1.2 版本之前,g ...

  7. java+批量下载大文件

    我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 这次项目的需求: 支持大文件的上传和续传,要求续传支持所有浏览器,包括ie6,ie7,i ...

  8. Cow and Snacks

    ​ D. Cow and Snacks 参考:Codeforces 1209D. Cow and Snacks 思路:利用并查集,构建一个生成树,然后树的边数就是能够开心的客人的人数.用一个条件fin ...

  9. RabbitAdmin

    RabbitAdmin底层实现就是从Spring容器中获取Exchange.Binding.Routingkey以及Queue的@声明然后使用RabbitTemplate的execute方法执行对应的 ...

  10. [清华集训2016]如何优雅地求和——NTT

    题目链接: [清华集训2016]如何优雅地求和 题目大意:给出一个多项式$m+1$个点值$a_{0},a_{1}...a_{m}$(其中$f(i)=a_{i}$),并给出两个数$n,x$,求$Q(f, ...