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来操作,这样才能按照单个字 ...
随机推荐
- 需求分析&系统设计
这个作业属于哪个课程 课程链接 这个作业要求在哪里 作业要求 团队名称 朋友 代打了解一下 这个作业的目标 需求分析&系统设计 一.团队成员的姓名学号列表 学号 姓名 特长 061126 黄天 ...
- BZOJ 1003 最短路dp
物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格的管理和跟踪.由于各种因 ...
- Codeforces Round #451 (Div. 2) [ D. Alarm Clock ] [ E. Squares and not squares ] [ F. Restoring the Expression ]
PROBLEM D. Alarm Clock 题 OvO http://codeforces.com/contest/898/problem/D codeforces 898d 解 从前往后枚举,放进 ...
- 将页面内搜索结果高亮显示(使用mark.js),且页面顶部定位到第一个搜索结果
<!DOCTYPE> <html> <head> <title> new document </title> <meta name=& ...
- python在window下环境搭建
1.Python安装包下载 地址:https://www.python.org/downloads/windows/ 然后找到对应系统版本的安装包 下载完成后,直接运行exe安装.在安装的时候开业勾选 ...
- App 仿淘宝:控制详情和购买须知样式切换,控制商品详情和购买须知选项卡的位置(固定在顶部还是正常)
CSS: <div id="details" ref="details" class="details" :class="t ...
- 【Python之路】特别篇--Bottle
Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Python的标准库外,其不依赖任何其他模块. Bottle框架大致可以分为以下部分 ...
- java中报错:problem with class file or dependent class; nested exception is java.lang.NoClassDefFoundError
今天和往常一样打开项目,竟然报错problem with class file or dependent class; nested exception is java.lang.NoClassDef ...
- Linux可变参数打印日志(二)
#include<stdio.h> #include<stdlib.h> #include<stdarg.h> #include<string.h> # ...
- vue使用子路由时,默认的子路由视图不显示问题
解决办法是,将父级的name去掉.(大多数情况下是按name来跳转的,不过这样一改,调到父级就得用路径跳转了): 下面上一下路由的配置: { path: "/index", com ...