首页 > 其他分享 >主动控制文件内指针移动

主动控制文件内指针移动

时间:2023-12-05 19:46:49浏览次数:38  
标签:移动 读取 read 模式 print 主动 指针

主动控制文件内指针移动

  • 文件内指针的移动时以Bytes为单位的,但是在t模式下时read(n),n以字符美单位的。
#文件内指针的移动时以Bytes为单位的,但是在t模式下时read(n),n以字符美单位的
with open('02.txt','rt',encoding='utf-8')as f:
    res=f.read(3)#hel    读取三个字符
    print(res,type(res))#<class 'str'>
with open('02.txt','rb')as f:
    res=f.read(3)#b'hel'
    print(res,type(res))#<class 'bytes'>

seek移动指针

  • 之前文件内指针的移动都是由读/写操作而被动触发的。
  • 若想读取文件某一特定位置的数据,则需要用f.seek()方法主动控制文件内指针的移动,详细用法如下:
    • f.seek(指针移动的字节数,模式控制):
  • 模式控制:

    • 0: 默认的模式,该模式代表指针移动的字节数是以文件开头为参照的
    • 1: 该模式代表指针移动的字节数是以当前所在的位置为参照的
    • 2: 该模式代表指针移动的字节数是以文件末尾的位置为参照的

    强调:

    • 其中0模式可以在t或者b模式使用,而1跟2模式只能在b模式下用

(1)0模式详解

  • 注意:
  • 由于在t模式下,会将读取的内容自动解码,所以必须保证读取的内容是一个完整中文数据,否则解码失败。
  • 在b模式下,要对读取的二进制数据进行解码
# 0模式
# #t 模式下
# with open('02.txt','rt',encoding='utf-8')as f:
#     f.seek(3,0)#光标从开始移动了三个字节
#     print(f.tell())#3   当前光标距离开头的位置为3
#     print(f.read())#苏毅航   从光标位置读取到末尾
# 注意:由于在t模式下,会将读取的内容自动解码,所以必须保证读取的内容是一个完整中文数据,否则解码失败


# #b 模式下   要对读出的二进制数据进行解码
# with open('02.txt','rb')as f:
#     f.seek(3,0)#光标从开始移动了三个字节
#     print(f.read().decode('utf-8'))#苏毅航 从光标位置读取到末尾

(2)1模式

  • 只能在b模式下使用
  • b模式下读取数据时,要对读取的数据进行解码
# #1模式
# # b模式
# with open('02.txt','rb')as f:
#     # f.seek(6,1)#光标从当前位置移动到第6个字节后
#     # f.tell()#距离开头的位置有6个字节
#     # print(f.tell())#6
#     # print(f.read())#读取余下的字符   b'\xe6\xaf\x85\xe8\x88\xaa'
#     f.seek(3,1)#光标从开始位置移动了3个字节
#     print(f.tell())#距离开头位置有3个字节
#     print(f.read())#读取余下的内容 b'\xe8\x8b\x8f\xe6\xaf\x85\xe8\x88\xaa'
#     print(f.read().decode())#对于下内容解码 苏毅航

(3)2模式

  • 只能在b模式下使用
  • b模式下读取数据时,要对读取的数据进行解码
# #2模式
# #b模式
# with open('02.txt','rb')as f:
#     # f.seek(0,2) #参照物为末尾,移动了0个字节,还在末尾
#     # print(f.tell())#12  距离开头的位置有12个字节
#     # print(f.read())#读剩下的内容  b''
#     f.seek(-6,2)#从末尾向前移动了6个字节
#     print(f.tell())#距离开头有6个字节
#     print(f.read())#读取余下内容 b'\xe6\xaf\x85\xe8\x88\xaa'
#     print(f.read().decode())#对于下内容解码  毅航

标签:移动,读取,read,模式,print,主动,指针
From: https://www.cnblogs.com/suyihang/p/17877996.html

相关文章

  • 不含指针的结构体赋值实现,直接内存拷贝
    #include<stdio.h>#include<stdlib.h>structA{ intc; charb[20]; charstrs[10][10]; intk;};intmain(){ //Aa={...};//帮我初始化 structAa={ 1,//Initializecwithsomeinteger "ExampleString",//Initialize......
  • 算法入门经典 刘汝佳 4.2 地址与指针
    4.2 地址和指针4.1节介绍的数学函数的特点是:做计算,然后返回一个值。有时候,我们要做的事情 并不是“计算”——如交换两个变量;而有时候,我们需要返回两个甚至更多的值——如解一个二元一次方程组。4.2.1 变量交换程序4-4 用函数交换变量(错误)#include<stdio.h>void swap(in......
  • 刷题复习(二)数组-双指针
    刷题复习(二)数组-双指针https://labuladong.gitee.io/algo/di-ling-zh-bfe1b/shuang-zhi-fa4bd/1、删除有序数组中的重复项慢指针用于统计不重复项,快指针用于不停前进对比是否有新的不重复项,有的话进行替换classSolution{publicintremoveDuplicates(int[]nums){......
  • 学c笔记归纳 第五篇——指针(抽象点)
    概念:内存会划分一个个的内存单元,每个内存单元都有一个编号,1个内存单元的大小为:1字节(1byte),内存单元的编号就是它的地址,地址也被称为指针。存放指针(地址)的变量就是指针变量;指针的本质就是地址,地址可以用指针变量存起来;指针变量也是变量,也分全局和局部。 #include<stdio.h>......
  • h5移动端使用video实现拍照、上传文件对象、选择相册,做手机兼容。
    html部分<template><divclass="views"><videostyle="width:100vw;height:calc(100vh-18vh)"object-fit="fill"></video><!--<imgstyle="width:100vw;height:calc(100vh-18vh)&......
  • C语言--深入理解指针
    C语言--深入理解指针一.指针的概念要知道指针的概念,要先了解变量在内存中是如何存储的。在存储时,内存被分为一块一块的,每一块都有一个特有的编号。而这个编号可以暂时理解为指针,就是酒店的门牌号一样。变量和地址看下面代码voidmain(){intx=10,inty=20;}代......
  • HDMI实现方块移动
    `timescale1ns/1ps////////////////////////////////////////////////////////////////////////////////////Company://Engineer:////CreateDate:2023/12/0418:50:05//DesignName://ModuleName:block_move//ProjectName://TargetDevices://......
  • 移动优先索引化对SEO的影响
    随着移动设备的普及和用户越来越多地使用手机进行搜索,搜索引擎开始采用移动优先索引化的策略。本文将为您介绍移动优先索引化对SEO的影响,并提供一些应对之策。1.什么是移动优先索引化:移动优先索引化是指搜索引擎首先以移动设备的内容和用户体验为基准来评估和排名网站。这意味着搜......
  • c语言实现this指针效果
    概要由于目前在做一个比较复杂的嵌入式项目,想要借此提升一下代码的结构设计能力,所以想要以面向对象的思想来完成这个项目,即把每个板载外设资源视为一个对象,采用msp+bsp的模式,对每个bsp外设实现对象化处理,现有方案需要手动传入对象引用,调用方法时比较麻烦,所以考虑简化调用方式。......
  • C++ 返回函数指针的函数
    目录0前言1FunctionPointerinC/C++type1.1ordinaryfunctionPointer1.2non-staticmemberfunctionofclass1.3LambdaToFunctionPointer1.4总结什么是指针2ReturningafunctionpointerfromafunctioninC/C++3.C-VariableArguments(Variablelengtharg......