Python 关于文件操作封包
本帖最后由 dyliuyunfei 于 2020-3-14 13:06 编辑前言:
继学习python以来,发布的自己第一个小程序“疫情宅家学习Python,提取文件名工具,设计师可用小工具”后,这次的目标是做个公司的下单系统
(有兴趣的朋友可以看看原贴:https://www.52pojie.cn/thread-1100889-1-1.html)
才发现要学习的太多了~ 现在基本恢复上班,时间变少了,不过不急,慢慢来,呵呵
这次带来的是关于本地文件操作的封包
实现功能:
1、返回文件总行数
2、返回文件所有内容
3、查找关键字行内容
4、写内容
缺点:
暂时没发现,有问题可以回复给我
以下上源码,文件名是:FileMana.py,可单独使用,也可以调用
因为自己是初学者,所以里面大多都用了中文注释
# _*_ coding: UTF-8 _*_
# 开发人员: dw
# 开发时间: 2020-03-1214:47
# 文件名称: FileMana.PY
# 开发工具: PyCharm
# 文件操作
import os
class fileDB:
def __init__(self, path, file, rows=None):# row默认值为不删除超出行数据
self.path = path# 文件路径
os.chdir(path)# 设定当前工作目录
# print("当前工作目录为 %s" % os.getcwd())
self.file = file# 文件名
self.rows = rows# 文件行数
def Line(self):# 获取文件行数
try:
count = 1
fo = open(self.file, mode="r", encoding="utf-8-sig")# 只读方式打开文件,文件必须存在
while True:
buffer = fo.read(8192 * 1024)
# print(buffer)
if not buffer:
break
count += buffer.count('\n')
fo.close()# 关闭文件
return count# 返回文件行数
except:
print("文件" + self.file + "获取行数异常!!")
def readAll(self):# 读取所有内容
try:
count = []
fo = open(self.file, mode="r", encoding="utf-8-sig")# 只读方式打开文件,文件必须存在
while True:
buffer = fo.read(8192 * 1024)
# print(buffer)
if not buffer:
break
count += buffer.splitlines()
fo.close()# 关闭文件
return count# 返回文件内容
except:
print("文件" + self.file + "读取所有内容异常!!")
def find(self, Keyword, only=False):# 查找关键字内容,默认返回全部有关键字行
try:
count = []
fo = open(self.file, mode="r", encoding="utf-8-sig")# 只读方式打开文件,文件必须存在
while True:
buffer = fo.readline()
if buffer.find(Keyword) != -1:
buffer = buffer.replace('\n', '')# 去除换行符
count.append(buffer)# 列表末尾添加符合条件的内容
if only: break# 仅查找一行的话跳出循环
if not buffer: break# 列表读取完成后跳出循环
fo.close()# 关闭文件
return count# 返回文件内容
except:
print("文件" + self.file + "查找关键字异常!!")
def write(self, doc, app=True):# 写文件,app为True:a追加,app为False:从文件开始写内容,文件存在用r+,文件不存在用w新建,默认追加
try:
if app:
Poin = "a"# 追加方式,光标文件尾
fo = open(self.file, mode=Poin, encoding="utf-8-sig")# 根据app值以不同方式打开文件
fo.write("\n" + doc)# 前部加换行符写入文件
fo.close()# 关闭文件
self.rowsLim(app=True)# 去除文件首部超出行
else:
if self.testing():# 检测文件是否存在
Poin = "r+"# 光标在文件开始处
else:
Poin = "w"# 光标在文件开始处,新建文件
fo = open(self.file, mode=Poin, encoding="utf-8-sig")# 根据app值以不同方式打开文件
old = fo.read()# 新建值读入原表内容
fo.seek(0)# 光标跳到第1行
fo.write(doc)# 写入新数据
fo.write("\n" + old)# 写入老数据,至此完成在文件头部增加内容
fo.close()# 关闭文件
self.rowsLim(app=False)# 去除文件尾部超出行
except:
print("文件" + self.file + "写入异常!!")
def testing(self):# 检测文件是否存在
path = os.path.isfile(self.file)
return path# 返回True或False
def rowsLim(self, app=True):# 行数限制,app为真删除文件前面多余的行,为假删除文件后面多余的行
if self.rows != None:
lines = self.Line()# 读取文件行数
lines = lines - self.rows# 文件行数-预定行数
if lines > 0:
print("文件行数超过 %d 行,已自动删除超出行内容 %d 行" % (self.rows, lines))
fo = open(self.file, mode="r+", encoding="utf-8-sig")# 根据打开文件
doc = fo.read()# 读取文件内容
for i in range(0, lines):# 去除超出行
if app:# app为真,删除文件前面多余的行
doc = doc
else:# app为假,删除文件后面面多余的行
doc = doc[:doc.rfind("\n") - 1]
fo.seek(0)# 指针跳到文件头
fo.truncate()# 清空文件内容
fo.write(doc)# 写入文件
fo.close()
if __name__ == "__main__":
filepath = "../Log"# 文件路径
filename = "UnitSet.log"# 文件名
rowsLimit = 10# 文件行数限制
file = fileDB(filepath, filename, rowsLimit)# 初始化
'''
# 返回文件总行数
lines = file.Line() # 返回文件总行数
print('文件总行数:{}'.format(lines))
# 返回文件所有内容
doc = file.readAll() # 返回文件所有内容
print("读取的文件内容为:\n", doc)
# 查找关键字行内容
key = "2"# 关键字
doc = file.find(key, only=True) # 查找关键字行内容,only为查找单/多选开关,False为查找所有,True查找单个,默认False
print("含有 {0} 的单行内容为:\n {1}".format(key, doc))
# 写内容
import random# 导入 random(随机数) 模块
doc = str(random.randint(0, 100))# 随机数0-100
file.write(doc, app=False)# True追加写入,False从文件开始处写入,doc必须为单条数据,不能为数组
doc = file.readAll()# 返回文件所有内容
print("读取的文件内容为:\n", doc)'''
注:
class里理论上不用改,在"if __name__ == "__main__":"里三引号调整相关数据即可(三引号里的内容默认是不执行的哈)
xinyangtuina 发表于 2020-3-14 13:49
"文件操作封包“
这个怎么理解 ?
也就是在编另外的程序的时候可以直接调用 18128585589 发表于 2020-3-14 14:02
好难啊,求一对一辅导!!!
百分之90的语句都有注释,再看不懂就需要先学基础了哟 python很好玩吧~~ 有点复杂
学习了 "文件操作封包“
这个怎么理解 ? 好难啊,求一对一辅导!!! 18128585589 发表于 2020-3-14 14:02
好难啊,求一对一辅导!!!
90%的语句都有注释,再看不懂就需要先学基础了哟 编码不容易 求一对一辅导
页:
[1]
2