文件的读写操作和遍历目录

Android复制assets目录下所有文件及文件夹到指定路径 /** * 复制assets目录下所有文件及文件夹到指定路径 * @param android.app.Activity mActivity 上下文 * @param java.lang.String mAssetsPath Assets目录的相对路径 * @param java.lang.String mSavePath 复制文件的保存路径 * @retur... 阅读详情

读文件

  • 过程:
    1. 找到文件
    2. 打开文件
    3. 读取文件内容
    4. 关闭文件
  • 打开文件
    • 原型:
      def open(file, mode=‘r’, buffering=None, encoding=None, errors=None, newline=None, closefd=True)
    • 参数:
      file:要打开文件的路径
      mode:打开方式
      encoding:编码格式
      errors:错误处理
    • 返回值:文件描述符,从当前的位置操作当前打开的文件
  • 打开方式
    • r 以只读方式打开文件,文件的引用(文件描述符)将会放在文件开头
    • rb 以二进制格式打开只读文件,文件的引用(文件描述符)将会放在文件开头
    • r+ 以读写的方式打开文件,文件的引用(文件描述符)将会放在文件开头
    • w 以只写方式打开文件,如果该文件存在,则将其内容覆盖,如果文件不存在则创建文件
    • wb 以二进制格式打开只写文件,如果该文件存在,则将其内容覆盖,如果文件不存在则创建文件
    • w+ 以读写的方式打开文件,如果该文件存在,则将其内容覆盖,如果文件不存在则创建文件
    • a 打开一个文件用于追加,如果该文件存在,文件描述符会放在文件的末尾,也就是说新内容添加到已有内容之后,如果文件不存在则创建文件进行写入
    • a+ 打开一个文件用于读写,如果该文件存在,文件描述符会放在文件的末尾,也就是说新内容添加到已有内容之后,如果文件不存在则创建文件进行写入
filePath = r"C:\Users\xlg\Desktop\code\file1.txt"
# 打开普通文件
fp = open(filePath, "r")
# 打开二进制文件
fp = open(filePath, "rb")
# 打开指定编码格式的文件
fp = open(filePath, "r", encoding="utf-8")
# 错误处理:直接忽略
fp = open(filePath, "r", encoding="utf-8", errors="ignore")

  • 完整过程
# 一般格式
try:
    fp = open("file1.txt", "r")
finally:
    if fp:
        fp.close()

# 简单写法(推荐)
with open("file1.txt", "r") as fp:
    print(fp.read())

写文件

  • 过程:
    1. 找到文件
    2. 打开文件
    3. 将内容写入缓冲区,此时内容没有写入文件
    4. 刷新缓冲区,直接把缓冲区的数据立刻写入文件
      • 刷新缓冲区方式:
        a. 程序结束
        b. 关闭文件
        c. 手动刷新
        d. 遇到\n
        e. 缓冲区满了
    5. 关闭文件
filePath = "file2.txt"
fp = open(filePath, "w")

# 将数据写入缓冲区
fp.write("bingle good\n")
# 手动刷新缓冲区
fp.flush()
time.sleep(5)

fp.close()

  • 完整过程
try:
    fp = open("file2.txt", "w")
finally:
    if fp:
        fp.close()
        
# 简写
with open("file2.txt", "a") as fp:
    fp.write("good man")

文件的编码与解码

#编码写
with open("file3.txt", "wb") as fp:
    strInfo = "bingle is a good man帅"
    strInfo = strInfo.encode("utf-8")
    print(strInfo)
    fp.write(strInfo)


# 解码读
with open("file3.txt", "rb") as fp:
    strInfo = fp.read()
    print(strInfo, type(strInfo))
    strInfo = strInfo.decode("utf-8")
    print(strInfo, type(strInfo))

chardet模块检测编码

  • encoding:表示编码格式,GBK是GB2312的超集,两者是同一种编码方式
  • confidence:表示检测的正确的概率
  • language:表示数据的语言
import chardet

#数据量小,猜测的不太对
data = "兵哥是一个好男人".encode("utf-8")
print(data)

ret = chardet.detect(data)
print(ret, type(ret))

info = data.decode(ret["encoding"])
print(info)

# 输出
b'\xe5\x85\xb5\xe5\x93\xa5\xe6\x98\xaf\xe4\xb8\x80\xe4\xb8\xaa\xe5\xa5\xbd\xe7\x94\xb7\xe4\xba\xba'
{'encoding': 'utf-8', 'confidence': 0.99, 'language': ''} <class 'dict'>
兵哥是一个好男人

StringIO和BytesIO

StringIO

  • 作用:数据的读写不一定都是文件,也可以在内存中读写,作用是在内存中读写字符串
from io import StringIO

#写
#1、获取一片内存空间
fp = StringIO()
fp.write("bingle ")
fp.write("is ")
fp.write("a ")
fp.write("good ")
fp.write("man!")
#获取写入的内容
print(fp.getvalue())

#读
#指针从头开始
fp.seek(0)
print(fp.read())
fp2 = StringIO("bingle is a\nnice man")
# print(fp2.read())
print(fp2.readlines())
fp.close()
fp2.close()

BytesIO

  • 作用:StringIO只能操作字符串,BytesIO可以操作二进制数据,作用是在内存中读写bytes
from io import BytesIO

fp3 = BytesIO()
fp3.write("bingle is a good man帅".encode("utf-8"))

fp3.seek(0)
print(fp3.read().decode("utf-8"))

OS模块的使用

  • 作用:包含了普遍的操作系统功能,提供了非常丰富的方法用来处理文件和目录


# 操作系统的类型
# nt      Windows
# posix   Linux、Unix
print(os.name)

#获取操作系统的系统信息,linux、Unix下使用
# print(os.uname())

#获取系统中的环境变量
print(os.environ)
#获取指定环境变量的值
print(os.environ.get("ALLUSERSPROFILE"))



#返回当前目录
print(os.curdir)
#得到当前工作目录的绝对路径
print(os.getcwd())
#返回指定目录下的所有文件和目录
print(os.listdir(r"C:\Users\xlg\Desktop\day1903\day16\code"))

#创建指定目录,注意目录已经存在时会报错
 os.mkdir(r"C:\Users\xlg\Desktop\day1903\day16\mk1")
os.mkdir(r"C:\Users\xlg\Desktop\day1903\day16\mk1\a\b\c")#如果存在不存在的路径层级会报错

#删除目录,目录不存在时报错
os.rmdir(r"C:\Users\xlg\Desktop\day1903\day16\mk1")

#获取文件属性
print(os.stat(r"C:\Users\xlg\Desktop\day1903\day16\code\file1.txt"))
#重命名
os.rename(r"C:\Users\xlg\Desktop\day1903\day16\code\file1.txt",r"C:\Users\xlg\Desktop\day1903\day16\code\file11.txt")
#删除普通文件
 os.remove(r"C:\Users\xlg\Desktop\day1903\day16\code\file11.txt")


#运行shell命令
 os.system("notepad")
 os.system("shutdown -s -t 10")
 os.system("shutdown -a")



#操作文件和目录的函数一部分在os模块中,还有一部分在os.path中


#返回指定路径的绝对路径
print(os.path.abspath("."))
#拼接路径
print(os.path.join(r"C:\Users\xlg\Desktop\day1903\day16\code","sunck"))
#拆分路径
print(os.path.split(r"C:\Users\xlg\Desktop\day1903\day16\code\a.txt"))
#获取文件扩展名
print(os.path.splitext(r"C:\Users\xlg\Desktop\day1903\day16\code\a.txt"))
#判断是否是目录
print(os.path.isdir(r"C:\Users\xlg\Desktop\day1903\day16\code"))
print(os.path.isdir(r"C:\Users\xlg\Desktop\day1903\day16\code\file2.txt"))
print(os.path.isdir(r"C:\Users\xlg\Desktop\day1903\day16\code\sunck"))
#判断是否是文件
print(os.path.isfile(r"C:\Users\xlg\Desktop\day1903\day16\code\file2.txt"))
print(os.path.isfile(r"C:\Users\xlg\Desktop\day1903\day16\code"))
print(os.path.isfile(r"C:\Users\xlg\Desktop\day1903\day16\code\file5.txt"))
#判断文件和目录是否存在
print(os.path.exists(r"C:\Users\xlg\Desktop\day1903\day16\code"))
print(os.path.exists(r"C:\Users\xlg\Desktop\day1903\day16\code\file2.txt"))
#判断路径是否是绝对路径(不论是否存在)
print(os.path.isabs(r"C:\Users\xlg\Desktop\day1903\day16\code"))
print(os.path.isabs(r"C:\Users\xlg\Desktop\day1903\day16\code\sunck"))
print(os.path.isabs(r"file2.txt"))
#获取文件名
print(os.path.basename(r"C:\Users\xlg\Desktop\day1903\day16\code\a.txt"))
#获取目录名
print(os.path.basename(r"C:\Users\xlg\Desktop\day1903\day16\code"))
#获取文件大小
print(os.path.getsize(r"C:\Users\xlg\Desktop\day1903\day16\code\file2.txt"))


文件持久化存储

pickle文件序列化和反序列化

持久化保存对象,将list、tuple、dict、set等数据序列化存储到文件


import pickle

user = {"account": "888888", "passwd": "123456"}
with open("users.txt", "wb") as fp:
    pickle.dump(user, fp)


with open("users.txt", "rb") as fp:
    user = pickle.load(fp)
print(user, type(user))

shelve 和 json的序列化反序列化

序列化操作

递归遍历目录

递归遍历目录

def traverseDir(dirPath, treeShow=""):
    import os
    filesList = os.listdir(dirPath)
    for fileName in filesList:
        absPath = os.path.join(dirPath, fileName)
        if os.path.isdir(absPath):
            #目录
            print(treeShow+"目录:"+fileName)
            traverseDir(absPath, treeShow+"  ")
        else:
            print(treeShow+"文件:" + fileName)

traverseDir(r"C:\Users\xlg\Desktop\file

栈模拟递归遍历目录



def traverseDir(dirPath):
    import os
    myStack = []

    myStack.append((dirPath, 0))

    while len(myStack) != 0:
        #出栈
        item = myStack.pop()
        path = item[0]
        num = item[1]
        treeShow = "  " * num
        filesList = os.listdir(path)
        for fileName in filesList:
            absPath = os.path.join(path, fileName)
            if os.path.isdir(absPath):
                # 目录
                print(treeShow+"目录:" + fileName)
                # 压栈
                myStack.append((absPath, num+1))
            else:
                print(treeShow+"文件:" + fileName)




traverseDir(r"C:\Users\xlg\Desktop\file")

队列模拟递归遍历目录(广度遍历)



def traverseDir(dirPath):
    import os
    from collections import deque

    q = deque([])

    #进队
    q.append((dirPath, 0))

    while len(q) != 0:
        item = q.popleft()
        path = item[0]
        num = item[1]
        treeShow = "  " * num
        
        filesList = os.listdir(path)
        for fileName in filesList:
            absPath = os.path.join(path, fileName)
            if os.path.isdir(absPath):
                # 目录
                print(treeShow+"目录:" + fileName)
                # 进队
                q.append((absPath, num+1))
            else:
                print(treeShow+"文件:" + fileName)



traverseDir(r"C:\Users\xlg\Desktop\file")

解决ADS1.2报错Cannot obtain license 报错如下 将licenses文件下的license内容进行修改: 修改为如下内容即可。 # # Generated on 2021-dec-1 by licwizard # PACKAGE ads armlmd 1.200 E32F0DE5161D COMPONENTS="armasm compiler bats armulate axd adwu fromelf armlink codewarrior armsd" INCREMENT ads armlmd 1.200 permanent uncounte 阅读详情

相关推荐

安装破解IAR EWARM 8.2,提供注册机

IAR Embedded Workbench for ARM(IAR for ARM)是一款微处理器的集成开发环境软件,该集成开发环境中包含了IAR的C/C++编译器、 汇编工具、链接器、库管理器、文本编辑器、工程管理器和C-SPY调试器,支持ARM,AVR,MSP430等芯片。   一、安装 双击运行安装程序,点击Install IAR Embedded Workbench for ARM...

睿思派克 4万+

Qt 使用QList实现 只读和读写的遍历方法

//QList 只读遍历方法 #include <QCoreApplication> // 头文件<QDebug>中已经包含了QList的头文件 #include <QDebug> int main(int argc, char *argv[]) { QList<int> list; // 创建一个空的列表list list<<1<<2<<3<<4<<5; // 利用操作运算符

Roninzhz的博客 2493

使用Qt Creator调用eBUS SDK

在新界面,勾选左下角“ Show unreachable Network Devices",可以看到没有成功连接的网络相机,原因是IP地址配置错误。每个版本的OpenCV的依赖项的名字都不同,我这里是opencv_world490.lib与opencv_world490d.lib。函数,可以看到在这里是图像缓存区,能够对捕获的图像进行一些操作。在Visual Studio打开项目属性,在VC++目录这里,把Opencv的路径添加进去。这时,会自动跳转到mainwindow.cpp,生成该按钮对应的槽函数。

qq_35685051的博客 1288

Python文件读写操作

open() 将会返回一个 file 对象 基本语法格式如下: open(filename, mode) filename:包含了你要访问的文件名称的字符串值。 mode:决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。 模式 描述 r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。 r+ 打开一个文件

shefin90的博客 257

KNX实战—ETS5_智能开关从零到一的配置全流程

本文详细介绍了使用ETS5软件配置KNX智能开关的完整流程。从创建项目、构建建筑结构,到导入产品数据库、添加并配置开关模块与智能面板,再到设置延时开关、闪烁报警等进阶功能,并深入解析了群组地址的配置与链接方法。最后指导完成项目校验与程序下载,帮助用户实现从零到一的智能灯光基础控制功能配置。

joy55的博客 541

倍福ADS通讯协议深度解析——从握手到数据包的完整旅程

本文以工程师视角,通过Wireshark抓包实战,深度解析了倍福ADS通讯协议的完整工作流程。从TCP三次握手建立连接,到拆解AMS/TCP信封、AMS Header地址与命令解析,再到ADS Data读写请求的载荷构成,完整呈现了一次数据通讯的“旅程”。文章重点剖析了协议包格式,并结合实际案例,提供了基于协议分析的故障排查思路,帮助开发者深入理解并精准调试工业自动化系统通讯。

weixin_29231725的博客 151

【python】io.BytesIO简要介绍及示例

在 Python 中,以b开头的字符串表示的是二进制字符串(bytes)。这种字符串是由字节组成的,每个字节都有一个对应的整数值,范围在 0 到 255 之间。二进制字符串与普通字符串不同,因为普通字符串是由 Unicode 字符组成的,每个字符都对应一个 Unicode 码点。在上面的示例中,我们在data变量中存储了一个二进制字符串,它以b开头。因此,当我们从 BytesIO 对象中读取数据并将其存储在read_data变量中时,它也是一个二进制字符串,同样以b开头。

qq_41604569的博客 2万+

ISA-95(S95)标准详解

ISA-95是制造业系统集成的“通用语言”,通过分层模型和信息流规范,打通企业计划层与设备控制层,成为实现数字化工厂的核心标准之一。其与ISA-88的协同应用,可进一步优化生产执行与资源管理的效率。标准,旨在解决企业商业系统(如ERP)与工业控制系统(如MES、SCADA)之间的集成问题。

「东哥说MES」 专注于MES制造执行系统,为你拆解核心架构、功能模块及与ERP/PLC的集成逻辑。提供从入门到精通的系列干货、精选行业报告与实用工具,构建你的数字化知识体系,关注我,用实战经验照亮你的数字化之路。 3737

python3中StringIO和BytesIO使用方法和使用场景详解

说起IO,很多人首先想到的是磁盘中的文件,将磁盘中的文件读到内存以及内存内容写入文件。但是还有一种内存和内存之间的IO,叫类文件对象,这一篇我们就一起来学习下python中的两个类文件对象:StringIO和BytesIO。 我是T型人小付,一位坚持终身学习的互联网从业者。喜欢我的博客欢迎在csdn上关注我,如果有问题欢迎在底下的评论区交流,谢谢。 文章目录内存中的IO操作环境标志位Strin...

T型人小付的博客 3万+

电源完整性必看!用SIwave提取PDN阻抗曲线的3个关键设置与常见报错解决

本文深入探讨了在SIwave中进行电源完整性(PI)仿真时,提取PDN阻抗曲线的三个核心设置要点。重点解析了端口阻抗设为0.1欧姆的物理意义与SYZ参数仿真中的阻抗匹配原则,并提供了针对常见收敛性问题和模型误差的实战排查思路,旨在帮助工程师获得更精确可靠的仿真结果,为去耦电容优化提供依据。

b9c0d的博客 352

Simulink实战:5步搞定固定翼飞行器六自由度动力学建模(附模型下载)

本文提供了一份详细的Simulink实战指南,通过5个核心步骤手把手教你构建固定翼飞行器的六自由度动力学模型。内容涵盖从顶层架构设计、核心方程手动实现,到模型集成、测试调试及进阶优化的完整流程,旨在帮助航空航天学生和工程师将抽象理论转化为可运行的仿真模型,并附有模型下载。

perl8的博客 634

【python学习】基础篇-常用模块:BytesIO在内存中读写二进制数据(字节数据)

通过使用BytesIO,我们可以在内存中对字节数据进行操作,而不需要创建实际的文件。它提供了类似于文件对象的接口,可以方便地对字节数据进行操作,而不需要实际创建文件。BytesIO是Python中的一个模块,用于在内存中读写字节数据。

邑轻辰的学习笔记 2192

【unity游戏开发入门到精通——UGUI】文本控件 —— TextetMeshPro新文本控件(TextMeshPro - Text(UI)和TextMeshPro - Text)

文本组件是UGUI中最常用的组件,它的作用是对文本数据进行处理并显示。UGUI的文本组件可以分两为种——Text旧文本控件、TextMeshPro新文本组件。本文主要是介绍TextMeshPro新文本控件,而TextMeshPro新文本控件又可以分为两种——TextMeshPro - Text(UI)和TextMeshPro - Text。TextMeshPro是Unity收购的一个第三方插件,现在已经自动内置到编辑器中,只要使用一次就会自动导入到工程。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 3766

# issue 5 文件和目录函数

清除文件流的错误旗标:

weixin_46481335的博客 728

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

python文件和目录的操作

python文件和目录的操作 python中,变量、序列和对象中存储的数据是暂时的,程序结束后就会丢失,为了能够长时间地保存程序中的数据,需要将程序中的数据保存到磁盘文件中,python提供了内置的文件和对象和文件、目录进行操作的内置模块。通过这些技术可以很方便地将数据保存到文件中,以达到长时间保存的目的。通过读写文件的操作,我们可以实现数据持久化。在Python中可以通过open函数来获得文件对象,可以通过文件对象的read和write方法实现文件读写操作。 首先来看在python中对文件的操作: 打开和

swwhxl的博客 257

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

ASP.NET:目录的遍历

ASP.NET:目录的遍历    文件目录的遍历操作是相对复杂一点,原理是利用Directory类的GetDirectories方法和GetFiles方法,进行循环读取文件或是子目录的操作。我们结合实例来介绍一下。     10.1.2 目录的遍历    在FilesCon项目里新建一个Web窗体,命名为DirCon_Sample2.aspx,添加四个Label标签控件用于显示信息,添加三个Lis

846

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

php文件和目录的基本操作

实验内容(代码和运行结果截图粘贴)1. 文件的读写操作。在自己的网站根目录下新建一个txt文档,插入几行测试数据。编写代码,使用PHP中文件读写的相关函数,实现对该文档的读写操作。要求,几个常用函数都尽量练习到。&lt;?php$filename="D:/phpStudy/WWW/php25/1.txt";$content="123456789101112.\n";$handle=fopen($f...

prentf的博客 542

python os模块 读写、创建 文件

本文摘自 https://www.cnblogs.com/juandx/p/4962089.html python中对文件、文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块。 得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 返回指定目录下的所有文件和目录名:os.listdir() 函数用来删除一个文件:os.remove() 删除多个目录...

M:Yang 3万+

excel 和 text 文件的读写操作

Python 的进阶使用 excel和text 文件的读写操作

记录学习路上的一些拙见 1417

python文件下载速度 装饰器_python使用装饰器对文件进行读写操作'及遍历文件目录...

'''使用装饰器对文件进行读写操作'''#def check_permission(func):#'''演示嵌套函数定义及使用'''#def wrapper(*args,**kwargs):#'''*args:接收任意多个实参并存入元组中;**kwargs:接收关键字参数显示赋值并存入字典中'''#if kwargs.get('username') != 'admin':#raise Except...

weixin_39883208的博客 103

文件遍历+读取+写入

文件遍历+读取+写入

m0_46103880的博客 534

Java File遍历目录以及RandomAccessFile定义语法

一、File 遍历文件 基语法:例如当前方法传递的参数为(File list)对象 File [] file = list.listFiles(); 再用循环和递归的方式循环出所有的子目录 二、RandomAccessFile使用 2.1 、RandomAccessFile的定义 对java文件内容发的访问,既可以读文件,也可以写入文件。 支持随机访问文件,可以访问文件任何位置。 ...

好好学习,天天向上! 301

将源文件的所有子目录以及子目录下的文件内容拷贝到指定目录下(java)

【代码】将源文件的所有子目录以及子目录下的文件内容拷贝到指定目录下(java)

mumushuiliang的博客 154

获取指定目录及子目录下所有txt文件的个数,并将这些txt文件复制到D盘下任意目录

package zuoye2; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class copytxt { public static v...

bilet的博客 2105

【Python基础篇】文件和目录操作

python文件读取,持久化;python字符编码;python目录文件读取,遍历

sd0830的博客 1631

【转载】qt中文件读写操作

原文出处:http://blog.youkuaiyun.com/wangqing_12345/article/details/51207548 1、QIODevice 直接继承自QObject QIODevice类是输入/输出设备的基类。 QIODevice为设备提供了公共实现和抽象接口用于读写块数据。 QIODevice是一个抽象类,不能被实例化。 被Q3Socket,Q3SocketDevice

Brunon的博客 1098
上一篇: 银行系统(python基础实现)
下一篇: scikit-learn 估计器的选择
Are you ready
博客等级 码龄8年 312粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值