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

Python 从入门到实战28(文件的读操作)

        我们的目标是:通过这一套资料学习下来,通过熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。

        上篇文章我们讨论了文件的打开、创建、关闭的相关知识。今天我们将学习一下文件的读的相关操作知识。

1、读取文件read()方法

在python中通过打开文件后就可以读取文件内容了。

读取指定字符方法方法: file.read(size)

file----为打开的文件对象

size---为可选参数,用于指定要读取的字符个数,若是省略则一次性读取所有内容。

注意:调用read()方法读取文件内容的前提是,打开文件时,打开模式r或者r+。

举例说明:读取文件"test_data.txt"

def main():
    with open("test_data.txt", "r") as test_data_file:
        test_data = test_data_file.read()  #读取文件中全部内容
        print(test_data)

输出参考:

xiaomi,123456

xiaohua,135790

xiaohui,246810

另外,举例读取一部分字符:

def main():
    with open("test_data.txt", "r") as test_data_file:
        test_data = test_data_file.read(13)  #读取前13个字符
        print(test_data)

输出结果:

xiaomi,123456

2、seek()指定光标位置

上面我们使用read()方法读取文件,读取文件都是从开头开始读取的。如果我们想从某一位置开始读取要怎么实现呢?可以使用seek()方法将文件的指针移动到新的位置处。然后在使用read(size)方法读取文件。

seek()语法: file.seek(offset, [, whence])

参数说明:offset----表示要移动的字节数,可以为正数、负数或零。

whence(可选)----表示移动文件指针的参考位置,默认值为0。有三种取值:0:表示从文件开头开始计算偏移量。1:表示从当前位置开始计算偏移量。2:表示从文件末尾开始计算偏移量。

举例说明:

def main():
    with open("test_data.txt", "r") as test_data_file:
        test_data_file.seek(7)    #索引也是从0开始,7指第8个字符开始
        test_data = test_data_file.read(6)  #从第8个字符读取6个字符,即读取密码
        print(test_data)

参考下面的文档内容,

输出结果:123456

举例读取最后一组数据:

                                                                                                                                               

def main():
    with open("test_data.txt", "r") as test_data_file:
        test_data_file.seek(-12,2)    #移动到文件末尾向前第12位置
        test_data = test_data_file.read(12)  #读取12个字符,即读取最后一组数据
        print(test_data)

执行报错了,因为以r模式打开只支持从文件头开始计算相对位置。以rb方式才支持从文件末尾计算。

修改后查看:

def main():
    with open("test_data.txt", "rb") as test_data_file:
        test_data_file.seek(-14,2)    #移动到文件末尾向前第14位置
        test_data = test_data_file.read(14)  #读取14个字符,即读取最后一组数据
        print(test_data)

输出参考:正确输出最后一行数据,

3、readline()读取一行

在使用read()方法读取文件时,如果文件很大,一次性读取全部内容到内存,容易造成内存不足。如何解决这个问题呢?可以通过读取一行数据。

使用语法:file.readline() 

同样需要注意,使用此方法也要打开模式是r(只读)或者r+(读写)。

举例说明,如我们读取上面test_data.txt 按行输出,并加上序号。

参考代码:

def main():
    with open("test_data.txt", "r+") as test_data_file: #打开文件
        sequence_no = 0
        while True:
            sequence_no = sequence_no+1   #作为序号输出
            line = test_data_file.readline()  #读取一行数据
            if line == "":             #读取到文件末尾退出循环,即退出读取文件
                break
            print(sequence_no,"\t"+ line)  #打印序号和一行内容

输出结果:

1     xiaomi,123456

2     xiaohua,135790

3     xiaohui,246810

4、读取全部行readlines()

使用readlines()可以读取全部文件内容,此方法返回值是一个字符串列表。

使用语法:file.readlines() 

同样需要注意,使用此方法也要打开模式是r(只读)或者r+(读写)。

举例说明,如我们读取上面test_data.txt

def main():
    with open("test_data.txt", "r+") as test_data_file:  # 打开文件
        test_data = test_data_file.readlines() #读取全部内容
        print(test_data)

输出结果:

['xiaomi,123456\n', 'xiaohua,135790\n', 'xiaohui,246810']

若是想一行行的输出,也可以循环打印:

def main():
    with open("test_data.txt", "r+") as test_data_file:  # 打开文件
        test_data = test_data_file.readlines() #读取全部内容
        for line in test_data:
            print(line)

输出结果参考:

5、读取csv文件

数据为my_data,在CSV文件中存储的。

内容如下:

读取csv方法:导入csv模块>reader()读取>输出信息查看

#coding = utf-8

import  csv  #导入csv
def main():
    user_file = csv.reader(open('my_data.csv', 'r'))  # 打开文档并读取
    for line in user_file:  #按行输出
        print(line)

执行后输出结果参考:

['zhangsan', '123456']

['wangwu', '257890']

['liuliu', '358147']

今天先写学习到这里了,每天进步一点点。明天也要加油啊!

相关文章:

Python 从入门到实战28(文件的读操作)

我们的目标是:通过这一套资料学习下来,通过熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。 上篇文章我们讨论了文件的打开、创建、关闭的相关知识。今天我们将…...

[leetcode刷题]面试经典150题之7同构字符串(简单)

这个题虽然是简单题,但是看了半天还是没啥好思路,最后看了解题学到了不少知识点 1.index() 函数查找序列中首次出现的元素索引 2.zip函数:用于将可迭代的对象(如列表、元组、字典等)作为参数,将对象中对应…...

【Keil5教程及技巧】耗时一周精心整理万字全网最全Keil5(MDK-ARM)功能详细介绍【建议收藏-细细品尝】

💌 所属专栏:【单片机开发软件技巧】 😀 作  者: 于晓超 🚀 个人简介:嵌入式工程师,专注嵌入式领域基础和实战分享 ,欢迎咨询! 💖 欢迎大家&#xff1…...

【rust】 基于rust编写wasm,实现markdown转换为html文本

文章目录 背景转换预览核心代码前置依赖rustup换源cargo换源中科大 wasm-pack安装 背景 尝试用rust编写一款markdown转html的插件,通过wasm给html使用,不得不说体积挺小,约200K, 比go的wasm起步2MB看着舒服点。 不过go的配置和换…...

Java中的反向代理与负载均衡:Nginx与Java服务的集成

Java中的反向代理与负载均衡:Nginx与Java服务的集成 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天我们来探讨一下Java应用中的反向代理与负载均衡,以及如何通过Ngin…...

高级java每日一道面试题-2024年9月26日-运维篇[分布式篇]-如何保证每个服务器的时间都是同步的?

如果有遗漏,评论区告诉我进行补充 面试官: 如何保证每个服务器的时间都是同步的? 我回答: 确保服务器之间的时间同步对于维护分布式系统的一致性、日志记录的准确性以及安全认证的有效性非常重要。以下是几种常见的方法来保证服务器时间同步: 1. 使用NTP&#…...

探索MemGPT:AI界的新宠儿

文章目录 探索MemGPT:AI界的新宠儿1. 背景介绍2. MemGPT是什么?3. 如何安装MemGPT?4. 简单的库函数使用方法5. 场景应用场景一:创建持久聊天机器人场景二:文档分析场景三:多会话聊天互动 6. 常见Bug及解决方…...

处理RabbitMQ连接和认证问题

在使用RabbitMQ进行消息队列管理时,我们可能会遇到各种连接和认证问题。本文将介绍如何诊断和解决这些问题,并通过使用RabbitMQ的管理端进行登录验证来确保配置正确。 1. 问题概述 在最近的一次部署中,我们遇到了两个主要问题: …...

FFmpeg中结构释放小函数

用于FFmpeg一些结构内存释放问题 #pragma once #include <iostream>extern "C" { #include "libavformat/avformat.h" #include "libavcodec/avcodec.h" #include "libavutil/avutil.h" #include "libavutil/frame.h"…...

C语言中的一些小知识(三)

一、你了解printf()吗&#xff1f; 你知道下面代码的输出结果吗&#xff1f; int a123; printf("%2d \n",a); printf() 函数是 C 语言中用于格式化输出的标准函数&#xff0c;它允许你将数据以特定的格式输出到标准输出设备&#xff08;通常是屏幕&#xff09;。p…...

编译win2k3中tools目录下i386mk.inc文件的作用

编译win2k3中tools目录下i386mk.inc文件的作用 在Windows Driver Kit&#xff08;WDK&#xff09;的根安装目录下&#xff0c;这些文件存储在bin子目录中。 在这些文件中&#xff0c;有特定于该目标的优化规则或汇编指令。可能还需要额外的链接标志、资源编译器标志或C预处理器…...

IPSec隧道协议学习(一)

前情回顾 前面介绍的GRE隧道协议&#xff0c;可以字LAN之间通过Internet建立隧道&#xff0c;实现网络间资源共享&#xff0c;但是GRE隧道协议不能实现加密功能&#xff0c;传输的数据不受加密保护&#xff0c;为了实现在隧道间传输数据包收到加密保护&#xff0c;需要使用IPS…...

计网作业3

1.交换机是依据 MAC地址 来转发数据包的 2.数据链路层 负责将数据封装成帧&#xff0c;在相邻节点间进行传输 数据链路层负责以下任务&#xff1a; 封装数据 物理地址寻址&#xff1a;使用MAC地址进行寻址&#xff0c;确保数据能够在局域网中正确传输到目标节点 介质访问控…...

什么是注入攻击???

在 Java 中&#xff0c;注入攻击是一种利用程序中的安全漏洞来执行恶意代码或获取未经授权的数据的攻击方式。 相关面试题&#xff1a; #{} 和 ${} 的区别是什么&#xff1f; ${}是 Properties 文件中的变量占位符&#xff0c;它可以用于标签属性值和 sql 内部&#xff0c;属…...

牛客小白月赛101(A~E)

文章目录 写在前面A tb的区间问题思路code B tb的字符串问题思路code C tb的路径问题思路code D tb的平方问题思路code E tb的数数问题思路code 牛客小白月赛101 写在前面 最近几天没怎么刷题&#xff0c;昨天晚上打的这场牛客月赛打的很烂&#xff0c;隔几天不刷题感觉自己的…...

MFC设置特定控件字体大小和背景颜色

MFC设置特定控件字体大小和背景颜色 初始化函数里 m_editFont.CreatePointFont(580 , _T("宋体"));m_ctrlEdit.SetFont(&m_editFont);重写消息 HBRUSH CMFCTESTDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) {HBRUSH hbr CDialogEx::OnCtlColor(pDC,…...

专题八_链表_算法专题详细总结

目录 链表 1.常用技巧 1&#xff09;画图&#xff01;&#xff01;&#xff01; -> 直观 形象 便于我们理解 2&#xff09;引入虚拟“头”节点 1.便于处理边界条件 2.方便我们对链表进行操作 3.不要吝啬空间&#xff0c;大胆定义变量 4.快慢双指针 1.判断链表是否…...

Vue3使用vue-quill富文本编辑器实现图片大小调整

安装uill-image-resize npm install quill-image-resize --save在项目中导入并注册插件 import { QuillEditor, Quill } from vueup/vue-quill; import ImageUploader from quill-image-uploader; import ImageResize from quill-image-resize; //导入插件 import vueup/vue-…...

感知笔记1:ROS 视觉- 跟随红球

- 目录 - 如何在 ROS 中可视化 RGB 相机。如何作为机器人切换主题。如何创建 blob 检测器。如何获取要跟踪的颜色的颜色编码。如何使用 blob 检测数据并移动 RGB 相机以跟踪 blob。 机器人技术中最常见的传感器是不起眼的 RGB 摄像头。它用于从基本颜色跟踪&#xff08;blob 跟…...

JAVA多线程机制

JAVA多线程的实现 JAVA有两种方法创建线程 &#xff08;1&#xff09;继承Thread类 &#xff08;2&#xff09;实现Runnable接口 这两种方法都要用到Thread类以及相关方法 Thread类 是一个具体的类&#xff0c;不是抽象类&#xff0c;封装了线程的行为 利用Thread类创建一个…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化

是不是受够了安装了oracle database之后sqlplus的简陋&#xff0c;无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话&#xff0c;配置.bahs_profile后也能解决上下翻页这些&#xff0c;但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可&#xff0c…...

绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化

iOS 应用的发布流程一直是开发链路中最“苹果味”的环节&#xff1a;强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说&#xff0c;这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发&#xff08;例如 Flutter、React Na…...