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

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']

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


http://www.kler.cn/news/319406.html

相关文章:

  • 从王卫在全球可持续交通高峰论坛上的发言,透视顺丰的变革逻辑
  • [Unity Demo]从零开始制作空洞骑士Hollow Knight第十集:制作后坐力系统Recoil和小骑士的生命系统和受伤系统
  • docker容器安装nginx
  • 如何在 Linux 中管理和清理日志文件( `find` 命令按时间批量删除日志)
  • Unity DOTS系列之Struct Change核心机制分析
  • 大模型-模型预训练-训练过程优化配置
  • 【鸿蒙HarmonyOS NEXT】数据存储之分布式键值数据库
  • 克里金插值算法文件
  • react学习笔记一:react介绍
  • Linux:路径末尾加/和不加/的区别
  • C#版Halcon:HalconDotNet最详细最全面教程(万字详细总结)
  • 算法-回溯
  • 【java入门】JDK的下载安装与环境配置,最新最详细教程!
  • ubuntu错误GPG error: http://repo.mysql.com/apt/ubuntu noble InRelease
  • 01-ZYNQ linux开发环境安装,基于Petalinux2023.2和Vitis2023.2
  • Python pyppeteer 与playwright 模拟浏览器请求 部署服务器遇到的坑
  • php发送邮箱教程:如何实现邮件发送功能?
  • 算法记录——链表
  • 【Linux基础IO】深入解析Linux基础IO缓冲区机制:提升文件操作效率的关键
  • MySQL—存储过程详解
  • 望繁信科技受邀出席ACS2023,为汽车行业数智化护航添翼
  • vue3自动暴露element-plus组件的ref
  • C# 找到给定点集的简单闭合路径(Find Simple Closed Path for a given set of points)
  • 203. 移除链表元素
  • David律所代理Jose Martin幽默水果版权首发维权,尚未TRO
  • MySQL安装教程
  • 240922-MacOS终端访问硬盘
  • C++_22_异常
  • C++:模版初阶
  • 手把手搞定VMware 的CentOS硬盘扩容