Python之文件操作工具
逐步完善中。
#!/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之文件操作工具的更多相关文章
- Python读写文件
Python读写文件1.open使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. file_object = open('t ...
- python计算文件的md5值
前言 最近要开发一个基于python的合并文件夹/目录的程序,本来的想法是基于修改时间的比较,即判断文件有没有改变,比较两个文件的修改时间即可.这个想法在windows的pc端下测试没有问题. 但是当 ...
- python操作文件案例二则
前言 python 对于文件及文件夹的操作. 涉及到 遍历文件夹下所有文件 ,文件的读写和操作 等等. 代码一 作用:查找文件夹下(包括子文件夹)下所有文件的名字,找出 名字中含有中文或者空格的文件 ...
- Python :open文件操作,配合read()使用!
python:open/文件操作 open/文件操作f=open('/tmp/hello','w') #open(路径+文件名,读写模式) 如何打开文件 handle=open(file_name,a ...
- python学习 文件操作
一.python打开文件 #=====================python 文件打开方式 open()===================== # open(fileName,type) t ...
- Python之文件读写
本节内容: I/O操作概述 文件读写实现原理与操作步骤 文件打开模式 Python文件操作步骤示例 Python文件读取相关方法 文件读写与字符编码 一.I/O操作概述 I/O在计算机中是指Input ...
- python 遍历文件夹 文件
python 遍历文件夹 文件 import os import os.path rootdir = "d:\data" # 指明被遍历的文件夹 for parent,dirn ...
- python检测文件的MD5值
python检测文件的MD5值MD5(单向散列算法)的全称是Message-Digest Algorithm 5(信息-摘要算法),经MD2.MD3和MD4发展而来.MD5算法的使用不需要支付任何版权 ...
- Python编码/文件读取/多线程
Python编码/文件读取/多线程 个人笔记~~记录才有成长 编码/文件读取/多线程 编码 常用的一般是gbk.utf-8,而在python中字符串一般是用Unicode来操作,这样才能按照单个字 ...
随机推荐
- 网络协议相关面试问题-TLS与SSL握手
HTTPS是什么? HTTPS并不是一个单独的协议,而是对工作在一加密连接(SSL / TLS)上的常规HTTP协议.通过在TCP和HTTP之间加入TLS(Transport Layer Securi ...
- string::compare
1. compare string (1) 4int compare (const string& str) const noexcept; substrings (2) int compar ...
- solr 数据库关联,表数据添加不进solr,一直indexing
id没有映射,数据库表字段没有id,要把其中一字段映射为id
- Java WEB框架——SSM迈向M之登录
1.pom.xml 关于pom.xml,<version>等标签先暂时不谈,<dependency> 的作用主要是添加相应的支持包,比如spring,servlet,jdbc等 ...
- Oracle之:Function :func_float()
create or replace function func_float(i_value float) return number is v_index number := 0; v_str var ...
- SpringBoot AOP介绍
说起spring,我们知道其最核心的两个功能就是AOP(面向切面)和IOC(控制反转),这边文章来总结一下SpringBoot如何整合使用AOP. 一.示例应用场景:对所有的web请求做切面来记录日志 ...
- 漫话:什么是 https ?这应该是全网把 https 讲的最好的一篇文章了
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/m0_37907797/article/d ...
- vue的简单使用
1.使用vue 下载vue.js: 下载地址:https://vuejs.org/js/vue.min.js:打开链接后是一大堆js代码:ctrl+s保存即可: 新建一个htm ...
- RAID技术超详细讲解
RAID 技术是一种多磁盘技术,面对数据的各方面有着两面性的影响,整体来说优点大于缺点的,下面我将详细介绍一下 RAID ,简称磁盘阵列技术. 一.RAID 概述 1988 年美国加州大学伯克利分校的 ...
- Word:表格无法分页显示
造冰箱的大熊猫@cnblogs 2019/1/30 今天遇到一个Word中表格无法分页显示的问题,特记录下来以备后查 我们知道,在Word中将表格不设置为“允许跨页断行”,假设表格中第二行某个单元格的 ...