当前位置: 首页 > news >正文

Day25笔记-普通文件读写with上下文二进制文件csv文件

一、文件读写【重点掌握】

常见文件的读写分类:

​ 1.普通文件文件,如txt,py,html等

​ 2.二进制文件,如图片,音频,视频,压缩包等

​ 3.csv文件,如csv,需要借助于系统模块csv

​ 4.对象的序列化和反序列化,如:pickle和json

​ 5.常用的办公文件,如excel,word,pdf等,需要借助于第三方模块

1.普通文件读写
1.1文件路径说明
'''
open(file)file:需要打开的文件路径
​
文件路径:可以使用相对路径或绝对路径,但是推荐相对路径绝对路径:从盘符开始的路径, 如:d:\Desktop\coding\Code\Day25Code\aaa\f1.txt相对路径:相对于当前工程和当前py文件,如:aaa/f1.txt
'''
# 1.绝对路径
# 注意1:因为路径中有特殊字符,为了保留字符原本的含义,建议使用r'xxx'表示路径的字符串
# 错误写法
# path1 = 'd:\Desktop\coding\Code\Day25Code\aaa\f1.txt'
# print(path1)   # d:\Desktop\coding\Code\Day25Code••1.txt
# 正确写法
path1 = r'd:\Desktop\coding\Code\Day25Code\a\f1.txt'
print(path1)
​
# 2.相对路径
# 情况一:如果当前py文件和txt文件平级,则可以直接书写txt文件名称
# f1 = open(r't2.txt')  # FileNotFoundError: [Errno 2] No such file or directory: 't2.txt'
f1 = open(r't1.txt')
​
# 情况二:如果当前py文件和txt文件的上级目录平级,则需要从上级目录开始书写
f2 = open(r'aaa/f1.txt')
​
# 情况三:如果py文件的上级目录和txt文件平级,则需要回退路径
'''
# ..表示回退一级目录,..\..表示回退两级目录
# f1 = open(r'..\f1.txt')
f2 = open(r'..\..\t1.txt')
'''
1.2读取
open(file,mode,encoding)
'''
open(file,mode,encoding)
mode:打开文件的模式'r' open for reading (default),打开文件默认表示读取'w' open for writing, truncating the file first,打开用于写入【工作原理:删除已经存在的文件,然后生成一个和原文件同名的新的空白文件】'x' create a new file and open it for writing,用于创建一个新文件并打开用于写入,少用'a' open for writing, appending to the end of the file if it exists,打开用于写入【工作原理:如果文件存在的情况下,则将新的内容追加到旧内容的后面】'b' binary mode,打开一个二进制文件't' text mode (default),默认识别文本,经常会省略
encodingencoding is the name of the encoding used to decode or encode thefile. This should only be used in text mode. The default encoding isplatform dependent, but any encoding supported by Python can bepassed  ,编码格式以字符串的方式表示,只要是Python支持的编码格式,都可以使用,默认编码格式由当前使用的平台决定常用的编码格式:utf-8gbk
'''
# 第一步:打开文件
# 注意1:在读取文件的时候,encoding的值一定要和被读取的文件的编码格式保持一致,否则因为无法解码而导致报错
# 注意2:encoding一定要用关键字参数表示
# 注意3:当open函数执行完毕,会得到一个被打开的文件对象,也被称为文件描述符,后续的操作都由文件描述符执行
f1 = open(r'aaa/致橡树.txt','r',encoding='gbk')
​
# 第二步:读取内容
# a.read():一次性读取全部内容
# r1 = f1.read()
# print(r1)
# read(n):一次读取n个字符
# r11 = f1.read(3)
# print(r11)
# r11 = f1.read(3)
# print(r11)
​
# b.readline():一次读取一行内容,以换行符作为分割的依据
# r2 = f1.readline()
# print(r2)
# r2 = f1.readline()
# print(r2)
​
# c.readlines():一次全部读取完毕,但是返回一个列表,列表中的元素是每行内容
r3 = f1.readlines()
print(r3)
# 注意4:如果读取到的数据没有达到预期的效果,需要手动处理
for line in r3:new_line = line.rstrip('\n').lstrip('\u3000').lstrip()print(new_line)
​
# 第三步:关闭文件
# 注意5:为了节约内存空间,当文件读写完毕之后,手动将文件关闭,释放占用的资源
f1.close()
​
# 注意6:打开文件用于读取,则文件路径一定要存在,否则会报错FileNotFoundError
# 注意7:在pycharm中手动创建一个文件,默认的编码格式是utf-8
1.3循环读取
# 1.read(n):通过结合循环的方式,一般用于读取文件内容量较多的情况
'''
import  os
path = r'aaa/致橡树.txt'
f = open(path,'r',encoding='gbk')
# 获取文件中的总字符数
total_size = os.path.getsize(path)
# print(total_size)
# 设定一次需要读取的字符串
sub_size = 8   # 一般设置为2的次方
while total_size > 0:r = f.read(sub_size)print(r)total_size -= sub_size
# 关闭文件
f.close()
'''
​
​
# 2.readline():结合循环读取所有的行
path = r'aaa/致橡树.txt'
f = open(path,'r',encoding='gbk')
while True:r = f.readline()print(r)if not r:break
f.close()
1.4写入
# 第一步:打开文件
# 注意1:如果打开模式采用的是w或a,则表示打开文件用于写入,此时文件可以不存在,会自动生成
# 注意2:如果打开模式使用的是w,则可以达到覆盖的目的
# 注意3:如果打开模式使用的是a,则在原内容的基础上进行追加
# f1 = open(r'aaa/a1.txt','w',encoding='utf-8')
f2 = open(r'aaa/a1.txt','a',encoding='utf-8')
​
# 第二步:写入内容
# f.write(字符串)
f2.write('轻轻的我走了~~~')
# 刷新,提高写入的效率
f2.flush()
​
# 第三步:关闭文件
f2.close()
2.with上下文
"""
语法:
with  对象   as  变量:pass
​
在文件读写中:
with  open()  as   f:读/写
​
说明:a.with上下文管理器一般用于简化代码,如:文件读写,数据库操作等b.使用with上下文管理器进行文件的读写之后,无需手动关闭文件,当with代码块执行完毕,对应的文件会自动关闭c.变量表示文件描述符,也就是打开的文件对象d.当通过with的方式打开文件,则文件读取和写入的操作一定要在with代码块中完成,否则文件会被关闭导致无法操作[ValueError: I/O operation on closed file.]
"""
with open(r'aaa/致橡树.txt','r',encoding='gbk') as f1:r = f1.read()print(r)
​
with open(r'aaa/a1.txt','a',encoding='gbk') as f2:f2.write('32345674123456789')f2.flush()
3.二进制文件读写

二进制文件:图片,音视频,压缩包等

b:bin,binary

注意:

​ a.读取和写入二进制文件需要使用rb和wb 'rb' 打开二进制文件用于读取 'wb' 打开二进制文件用于写入 b.因为二进制文件是由二进制【字节】组成,没有编码一说,所以需要省略encoding参数,如果设置encoding,报错ValueError: binary mode doesn't take an encoding argument

with open(r'aaa/3.png','rb') as f1:r = f1.read()print(r)
​
with open(r'aaa/img.png','wb') as f2:f2.write(r)   # f2.write(字节)f2.flush()
4.CSV文件读写

CSV(Comma Separated Values逗号分隔值)

.csv是一种文件格式(如.txt、.doc等),也可理解.csv文件就是一种特殊格式的纯文本文件。即是一组字符序列,字符之间用英文字符的逗号或制表符(Tab)分隔

所以,CSV文件本身就是是个纯文本文件,这种文件格式经常用来作为不同程序之间的数据交互的格式

.csv文件打开方式有多种,如记事本、excel、Notepad++,sublime等,只要是文本编辑器都能正确打开

import  csv

# 一、读取csv文件
with open(r'aaa/b1.csv','r',encoding='utf-8') as f1:
    # reader(iterable)----->iterator
    reader = csv.reader(f1)
    # for row in reader:
    #     print(row)
    datalist = list(reader)
    print(datalist)

# 二、写入csv文件
datalist = [['name', 'age', 'address'], ['zhangsan', '10', '上海'], ['lisi', '20', '北京'], ['wangwu', '19', '深圳'], ['xiaoming', '18', '成都']]
# 如果在写入内容之后,发现每行内容的后面莫名其妙的出现了一个空行,则可以通过newline解决
with open(r'aaa/b2.csv','w',encoding='utf-8',newline='') as f2:
    writer = csv.writer(f2)

    # 方式一:通过遍历的方式,逐行写入
    # for data in datalist:
    #     writer.writerow(data)

    # 方式二:一次性写入多行
    writer.writerows(datalist)

相关文章:

Day25笔记-普通文件读写with上下文二进制文件csv文件

一、文件读写【重点掌握】 常见文件的读写分类: ​ 1.普通文件文件,如txt,py,html等 ​ 2.二进制文件,如图片,音频,视频,压缩包等 ​ 3.csv文件,如csv,需要借助于系统模块csv ​ 4.对…...

MySQL安装教程

MySQL安装教程 如果需要删除原有mysql,然后安装过新的,可以参照如何彻底卸载旧mysql重装测试 1. 准备资源 mysql官网直达:https://dev.mysql.com/downloads/mysql/ CADN:https://download.csdn.net/download/luocong321/89592962 …...

【Windows】快速帮你解决如何找到 Windows 上的 .condarc 文件

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…...

『正版软件』XYplorer 专业的 Windows 文件管理工具软件

在数字化时代,我们每天都在与各种文件打交道。无论是工作文档、个人照片还是多媒体资料,管理这些文件的效率直接关系到我们的工作效率和生活体验。今天,我要向大家推荐一款功能强大、操作简便的文件管理软件 —— XYplorer。 XYplorer&#x…...

“吉林一号”宽幅02B系列卫星

离轴四反光学成像系统 1.光学系统参数: 焦距:77.5mm; F/#:7.4; 视场:≥56゜; 光谱范围:400nm~1000nm。 2.说明: 光学系统采用离轴全反射式结构,整…...

我的AI工具箱Tauri版-FasterWhisper音频转文本

本教程基于自研的AI工具箱Tauri版进行FasterWhisper音频转文本服务。 FasterWhisper音频转文本服务 是自研AI工具箱Tauri版中的一款模块,专门用于将音频或视频中的语音内容自动转化为文本或字幕。通过简单的配置,该工具能够批量处理大量音频或视频文件&…...

Java后端中的延迟队列实现:使用Redis与RabbitMQ的不同策略

Java后端中的延迟队列实现:使用Redis与RabbitMQ的不同策略 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿! 在后端开发中,延迟队列(Delayed Queue&#xff09…...

Linux中使用cp命令的 -f 选项,但还是提醒覆盖的问题

问题: linux 在执行cp的命令的时候,就算是执行 cp -f 也还是会提醒是否要进行替换。 问题原因: 查看别名,alias命令,看到cp的别名为cp -i,那就是说cp本身就是自带覆盖提醒,就算我们加上-f 的…...

互联网技术的持续演进:从现在到未来

互联网技术的持续演进:从现在到未来 在过去的十年里,互联网技术发生了飞速变化。无论是大数据、人工智能,还是5G网络和物联网,每一种技术的突破都在改变我们的生活方式和工作模式。作为现代社会的核心驱动力,互联网技…...

vscode安装ESLint与Vetur插件后自动修复代码不生效

vscode安装ESLint与Vetur插件后自动修复代码不生效 1、安装ESLint 和 Vuter 2、运行结果 2.1、代码保存时代码中的分号;能被检测出来,但是不会自动修复 2.2、手动运行ESLint 修复命令(在终端中执行 npx eslint . --fix)可以修复问题 3、解决办法 在.vscode目录下setti…...

2848、与车相交的点

2848、[简单] 与车相交的点 1、题目描述 给你一个下标从 0 开始的二维整数数组 nums 表示汽车停放在数轴上的坐标。对于任意下标 i,nums[i] [starti, endi] ,其中 starti 是第 i 辆车的起点,endi 是第 i 辆车的终点。 返回数轴上被车 任意…...

基于k8s手动部署rabbitmq集群(Manually Deploying RabbitMQ Cluster Based on k8s)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…...

mybatis 配置文件完成增删改查(四) :多条件 动态sql查询

文章目录 就是你在接收数据时,有的查询条件不写,也能从查到相应的stauts也可能为空恒等式标签 代替where关键字 就是你在接收数据时,有的查询条件不写,也能从查到相应的 注意是写字段名 还是 属性名 companyName不写也能查出满足…...

先楫HPM6750 Windows下VSCode开发环境配置

用的是EVKmini,ft2232作为调试器jtag接口调试 启动start_gui.exe 以hello_world为例,更改一下build path,可以generate并使用gcc compile 最后会得到这些 点击start_gui里面的命令行,用命令行启动vscode 新建.vscode文件夹&…...

【JavaScript】LeetCode:41-45

文章目录 41 排序链表42 合并k个升序链表43 LRU缓存44 二叉树的中序遍历45 二叉树的最大深度 41 排序链表 递归 归并排序找到链表中心点,从中心点将链表一分为二。奇数个节点找中心点,偶数个节点找中心左边的点作为中心点。快慢指针找中心点&#xff0c…...

数据结构(Day18)

一、周学习内容 1、9.18 数据结构(Day15)-CSDN博客 2、9.19 数据结构(Day16)-CSDN博客 3、9.20 链表 目的 插入删除不需要移动任何节点(元素)。 不需要预估存储空间大小,长度动态增长或减小。…...

error: ‘InsertAtTop‘ was not declared in this scope

Qt编译错误记录: 报错:error: ‘InsertAtTop’ was not declared in this scope ui->comboBoxJob->setInsertPolicy(InsertAtTop);这行代码在Qt中编译就会报这个错误,原因是输入参数需要加类名限定,改为: ui-…...

MySQL缓冲池详解

Buffer Pool 本文参考开源项目:小林coding在线文档; 01-缓冲池概述 ​ 在MySQL查询数据的时候,是通过存储引擎去磁盘做IO来获取数据库中的数据,这样每次查询一条数据都要去做一次或者多次磁盘的IO,无疑是非常慢的。…...

【我的 PWN 学习手札】tcache stash with fastbin double free —— tcache key 绕过

参考看雪课程:PWN 探索篇 前言 tcache key 的引入使得 tcache dup 利用出现了困难。除了简单利用 UAF 覆写 key 或者House Of Karui 之外,还可以利用 ptmalloc 中的其他机制进行绕过。 一、Tcache Stash with Fastbin Double Free 之前是 double free …...

How can I stream a response from LangChain‘s OpenAI using Flask API?

题意:怎样在 Flask API 中使用 LangChain 的 OpenAI 模型流式传输响应 问题背景: I am using Python Flask app for chat over data. In the console I am getting streamable response directly from the OpenAI since I can enable streming with a f…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...