当前位置: 首页 > 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…...

华为云AI开发平台ModelArts

华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...

docker详细操作--未完待续

docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...

MMaDA: Multimodal Large Diffusion Language Models

CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分&#xff1a;派生类构造函数与析构函数 当创建一个派生类对象时&#xff0c;基类成员是如何初始化的&#xff1f; 1.当派生类对象创建的时候&#xff0c;基类成员的初始化顺序 …...