文本操作的底层

Python文件指针操作:seek()与tell()的底层原理 本文深入探讨了Python中文件指针的核心机制,重点分析了seek()和tell()方法的底层原理、性能特征及实际应用。文件指针是控制文件读写位置的关键,Python通过操作系统提供的文件描述符和偏移量来管理文件指针。seek()方法允许精确移动文件指针,支持从文件开头、当前位置或文件末尾进行跳转,而tell()方法则返回当前指针位置。文章还比较了二进制模式和文本模式下文件指针行为的差异,并提供了文件分块处理、随机访问数据库式文件等高级应用场景。此外,文章还介绍了性能优化技巧,如批量操作减少seek调用、预 阅读详情

下面是一个简单的操作文本的底层,通过自定义存储格式,读取遵循定义好的协议,从而对数据进行操作。通过将文本数据转化为类返回给用户。

直接上代码:

 /// <summary>
    /// 文本阅读器
    /// </summary>
    public class TxtReader
    {
        private static string path = System.AppDomain.CurrentDomain.BaseDirectory + "Data\\datafile.txt";

        public static string Path
        {
            get { return path; }
            set { path = value; }
        }
        /// <summary>
        /// 从文本取数据,单条
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="str_LineData"></param>
        /// <returns></returns>
        public static T AddData<T>(string str_LineData)
            where T:new()
        {
            string[] str_Data = str_LineData.Split(new string[]{"-|-"},StringSplitOptions.RemoveEmptyEntries);
            T model = new T();
            for (int i = 0; i < str_Data.Length; i++)
            {
                string[] property = str_Data[i].Split(new string[]{"||"},StringSplitOptions.RemoveEmptyEntries);
                PropertyInfo propertyInfo = model.GetType().GetProperty(property[0]);
                if (propertyInfo != null)
                    propertyInfo.SetValue(model, GetDecodstr(property[1]), null);
            }
            return model;
        }
        /// <summary>
        /// 从文本取数据,批量
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="str_MultiData"></param>
        /// <returns></returns>
        public static IList<T> AddList<T>(string str_MultiData)
             where T:new()
        {
            IList<T> _List=new List<T>();
            string[] str_Data = str_MultiData.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
            foreach(var item in str_Data)
            {
                T info = AddData<T>(item);
                _List.Add(info);
            }
            return _List;
        }
        /// <summary>
        /// 取数据,批量
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public static IList<T> GetData<T>()
            where T:new()
        {
            string str_Data = ReadStr();
            return AddList<T>(str_Data);
        }

        /// <summary>
        /// 添加数据
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        public static void Add<T>(T obj)
            where T:new()
        {
            string str = ConvetToEncodeStr<T>(obj);
           SaveStr(str);
        }
        /// <summary>
        /// 对数据进行编码
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="str_LineData"></param>
        /// <returns></returns>
        public static T GetEncodeData<T>(string str_LineData)
            where T : new()
        {
            string[] str_Data = str_LineData.Split(new string[] { "-|-" }, StringSplitOptions.RemoveEmptyEntries);
            T model = new T();
            for (int i = 0; i < str_Data.Length; i++)
            {
                string[] property = str_Data[i].Split(new string[] { "||" }, StringSplitOptions.RemoveEmptyEntries);
                PropertyInfo propertyInfo = model.GetType().GetProperty(property[0]);
                if (propertyInfo != null)
                    propertyInfo.SetValue(model, GetEncodStr(property[1]), null);
            }
            return model;
        }
        /// <summary>
        /// 将实体进行编码,返回字符串
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <returns></returns>
        private static string ConvetToEncodeStr<T>(T obj)
            where T:new()
        {
            PropertyInfo[] propertyInfos = obj.GetType().GetProperties();
            string result = string.Empty;
            foreach (var item in propertyInfos)
            {
                result += item.Name + "||" + GetEncodStr(item.GetValue(obj, null).ToStr()) + "-|-";
            }
            return result;
        }
        /// <summary>
        /// 将实体进行编码,返回实体
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <returns></returns>
        private static T ConvetToEncode<T>(T obj)
            where T : new()
        {
            PropertyInfo[] propertyInfos = obj.GetType().GetProperties();
            foreach (var item in propertyInfos)
            {
                item.SetValue(obj, item.GetValue(obj,null), null);
            }
            return obj;
        }
        /// <summary>
        /// 删除实体
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="Id"></param>
        /// <param name="FiledName"></param>
        public static void Delete<T>(string Id,string FiledName)
            where T:new()
        {
            string result = string.Empty;
            using (StreamReader sr = new StreamReader(Path, System.Text.ASCIIEncoding.UTF8))
            {
                string str = null;
                while ((str = sr.ReadLine()) != null)
                {
                    if (str.Length > 0)
                    {
                        T _t = AddData<T>(str);
                        PropertyInfo pinfo = _t.GetType().GetProperty(FiledName);
                        if (pinfo != null)
                        {
                            object ibj = pinfo.GetValue(_t, null);
                            if (!Id.Equals(ibj.ToStr()))
                            {
                                result += ConvetToEncodeStr<T>(_t)+"\r\n";
                            }
                        }
                    }
                }
            }
            _SaveStr(result);
        }
        private static string GetEncodStr(string _str)
        {
            return Convert.ToBase64String(System.Text.ASCIIEncoding.UTF8.GetBytes(_str)).ToStr();
        }
        private static string GetDecodstr(string str)
        {
            return System.Text.ASCIIEncoding.UTF8.GetString(Convert.FromBase64CharArray(str.ToArray(), 0, str.Length)).ToStr();
        }
        private static string ReadStr()
        {
            using (StreamReader sr = new StreamReader(Path, System.Text.ASCIIEncoding.UTF8))
            {
                return sr.ReadToEnd();
            }
        }
        private static void SaveStr(string str)
        {
            using (StreamWriter sw = new StreamWriter(Path, true, System.Text.ASCIIEncoding.UTF8))
            {
                sw.WriteLine(str);
            }
        }
        private static void _SaveStr(string str)
        {
            using (StreamWriter sw = new StreamWriter(Path, false, System.Text.ASCIIEncoding.UTF8))
            {
                sw.WriteLine(str);
            }
        }
    }


C语言文件操作:从底层原理到实战演练 本文系统介绍了C语言文件操作的核心概念与实现方法。主要内容包括:1. 文件存储原理与操作系统管理机制;2. 流(Stream)作为程序与文件间的桥梁;3. 文本流与二进制流的区别及验证实验;4. 文件指针、核心函数(fopen/fputs/fprintf/fgets/fclose)的实战应用;5. 缓冲区的关键作用及fclose的重要性。文章通过代码示例详细演示了完整的文件读写流程,帮助开发者深入理解C语言文件I/O的工作原理和最佳实践。 阅读详情

相关推荐

电机控制——PMSM无感FOC控制(一)FOC入门

FOC 是一种电机控制技术,全称为 Field Oriented Control(磁场定向控制),也称作矢量控制。该技术可以提高电机的效率、控制稳定性和精度,广泛应用于电机驱动系统中,是目前无刷直流电机(BLDC)、永磁同步电机(PMSM)、感应电机的高效控制的最优方法之一。本节主要讲了FOC的大致流程,带大家先了解FOC到底是个什么东西在做什么,各个模块具体的原理会放到后面的章节详细讲解。FOC其实就是通过控制,相电流按照正弦变化,从而产生出旋转的磁场,控制电机转子转动。

zhuxinmingde的博客 2634

拜师——python基础入门—第十大节课— file文件操作 操作系统底层关系 写入文件——day44

第136课时: file文件操作 操作系统底层关系 写入文件 一个完整的程序一般都包括数据的存储和读取, 要将数据写入我们的硬盘 操作文件叫:io i o 表示输入与输出 文本文件和二进制文件: 按文件中数据 组织形式 ,我们把文件分为 1文本文件 和 2 二进制文件 两大类。 1 文本文件 文本文件存储的是普通 “ 字符” 文本,Unicode字符集,两个字节表示一个字符, 可以用记事本正常打开的文件 Word文档不是文本文件 是非文本文件,是二进制文件。(用记事本打开是乱码) 1 二进制文件

asd1103810477的博客 227

基于ENVI5.6与SARscape的哨兵一号时序InSAR实战:从数据准备到PS/SBAS结果解译

本文详细介绍了基于ENVI5.6与SARscape软件,利用哨兵一号(Sentinel-1)卫星数据,进行PS-InSAR与SBAS-InSAR时序分析,以监测地表形变的完整实战流程。内容涵盖从数据下载、软件配置、预处理、核心处理步骤到结果解译与质量评估,重点解析了PS与SBAS方法的关键参数设置、常见问题及解决方案,旨在帮助用户掌握从数据准备到成果分析的完整技术链条。

oo7890的博客 634

linux文件IO底层读写操作

1.底层文件访问。          运行中的程序成为进程,每个进程都有与之关联的文件描述符。       文件描述符 - 一些小值整数,通过他们访问打开的文件或设备。开始运行会有三个文件描述符: 0:   标准输入   STDIN_FILENO 1:   标准输出   STDOUT_FILENO 2:   标准错误   STDERR_FILENO       文件描述符的变化范围...

正版冒雨 2676

关于深度可分离卷积

关于深度学习中的深度可分离卷积

qq_45670407的博客 1796

老司机避坑指南:UC3842自举驱动电路发热严重?这样选C39/C37电容值最稳

本文针对UC3842自举驱动电路发热严重的问题,深入剖析了驱动波形边沿速度与损耗的矛盾根源。通过实测数据与热成像分析,重点阐述了关键电容C39/C37的选型策略,提供了从经验公式到量化计算的优化方法,帮助工程师在发热与效率间找到最佳平衡点,并探讨了分立方案与专用驱动IC的适用场景。

lambda的博客 747

文件存储和删除的底层过程

本文转载自:https://www.cnblogs.com/f-ck-need-u/p/8659301.html。仅限于学习交流,侵权必删。 当a.txt文件要存储到/tmp下时: (1).首先从inode table中找一个空闲的inode号分配给a.txt,例如2222。再将inode map(imap)中2222这个inode号标记为已使用。 (2).在/tmp的data block中添加一条a.txt文件的记录。该记录中包括一个指向inode号的指针,例如"0x2222"。 (3..

MyySophia的博客 1311

C++ int转四字节数组

字节转换

我不是码农的博客~~~ 974

2026架构前瞻:从文本生成到跨端操作,移动端agnet执行体的底层范式转移

2026年AI竞争焦点转向具备原生操作能力的ActionableAI,移动端跨APP自动化成为技术突破难点。新一代MobileAgent采用视觉语义定位和状态机驱动技术,通过端云协同多模态架构实现屏幕元素智能识别,结合内核级事件注入确保操作可靠性。侠客工坊项目将该技术转化为企业级解决方案,构建分布式数字员工网络,使普通安卓设备能7x24小时执行标准化业务流程,显著提升企业运营效率。这标志着移动端自动化从脆弱脚本向智能执行体的进化,正在重塑企业数字化转型的底层基础设施。

侠客工坊的博客,将普通手机变成AI手机,数字员工自动执行任务 941

[SaaS] 阿里妈妈-万相营造

有controlnet的介入,我们是默认controlnet会介入,在inapinting时会把带有商品的画布做一点扩充,然后走inapinting和controlnet,其实也做了一点outpainting的工作。基于阿里妈妈营销平台,提供从图文到视频再到落地页的素材级智能化创意支持,是您营销创意数字资产累积和升值的阵地,最大化提升营销的效率和效果。目前看来抠图基本都是sam了,现在weshop也是,都有一个预扣好的主体,但是一点进去也会重新sam。atomovideo->图生视频。

liguandong 524

气象水文资料预处理:缺测数据插补延长等

简介气象水文资料预处理

WW、forever的博客 3772

Python 文件操作与底层机制深度解析:从 IO 到模块加载的核心术语指南

掌握文件操作、底层机制和特殊术语,是从 Python 应用开发迈向框架设计的关键一步。无论是处理复杂文件格式时的编码问题,还是优化内存占用时的__slots__技巧,或是解决模块导入失败时的查找器调试,这些知识都能让你在开发中更加游刃有余。

佑瞻的博客 932

C语言入门:C 语言中的 “文本流”

在 C 语言中,“文本流” 是 标准 I/O 库(Standard I/O Library)提供的一种抽象概念,用于处理字符数据的输入输出。将字符序列视为一个连续的、无边界的数据流,屏蔽了底层设备(如硬盘、键盘、显示器)的差异。对换行符等特殊字符进行系统无关的处理,使程序在不同操作系统(Windows、Linux、Unix)下可以统一处理文本数据。抽象统一:屏蔽了不同设备和操作系统的差异,让程序员只需处理字符序列。简单易用:提供字符级、行级、格式化等多层操作接口,适应不同场景。

Mr_-G,一名勤奋底层软件开发工程师的博客 1019

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

linux编辑文档windows,1.9vim编辑器linux内核的底层文本编辑器,跟windows系统上的文本文档类似,大部分用这个工具进行文本的编辑,这个工具的操作方式基本上用不到鼠标,多是...

1.9vim编辑器linux内核的底层文本编辑器,跟windows系统上的文本文档类似,大部分用这个工具进行文本的编辑,这个工具的操作方式基本上用不到鼠标,多是用命令去操作这个工具分为三种模式:命令模式,插入模式,尾行模式命令模式:通过命令去操作vim编辑器,复制,粘贴,删除,退出,保存yy:复制光标所在行 nyy:从光标当前行开始,复制n行p:粘贴,从光标当前行下一行开始粘贴所复制的数据dd:...

weixin_39747568的博客 86

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

vim通用文本编辑器,三种模式

linux vi/vim vim是从vi发展出来的一种文本编辑器,目前应用十分广泛。 vim有三种模式:命令模式、编辑模式、底层/命令行模式。这三种模式的作用分别是: 命令模式 用户刚启动vim,进入文本,便是命令模式 i 切换到编辑模式,可以输入字符 (还有I/A/a/o/O) : 切换到底行/命令行模式,可以在最后一行输入命令 ZZ 退出文本,并保存 yy 复制当前光标所在行 p ...

老徐是个铁憨憨 743

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

走进底层-C语言文件操作

C语言中,“流”是一种用于输入输出的抽象概念 ,是一种数据的传输方式,具体指从键盘或文件中获取数据,从屏幕或文件输出数据。C语言中的流分为标准流和文件流,相关的函数定义在头文件stdio.h中。

2401_86909484的博客 2328

java基于PDF底层内容流的解析对文本内容进行编辑

新内容插入在插入新文本时,需要考虑到字体的设置。如果PDF中的字体没有包含新文本所需的字符,可能会导致显示问题,因此通常选择使用系统字体来确保文本正确显示。插入时需要根据坐标和字体等自定义的参数来绘制新的文本块。

weixin_44711513的博客 3994

Kilo Tutorial:一款轻量级文本编辑器的学习教程

Kilo Tutorial:一款轻量级文本编辑器的学习教程 项目简介 是一个为开发者设计的开源项目,它提供了一个名为“Kilo”的简单但功能齐全的文本编辑器教程。Kilo 是一个只有约千行代码的终端文本编辑器,是学习操作系统、内存管理、I/O处理等底层编程知识的理想实践平台。 技术分析 Kilo 的源码简洁明了,主要由 C 语言编写,这使得它具有跨平台的能力。它的核心特性包括: 基本编辑功能:如...

gitblog_00039的博客 751

【C语言】从底层深入解析文件操作

在早期,程序需要直接和硬件打交道。比如,从磁盘读取数据需要知道数据在磁盘的哪个扇区,哪个磁道,还要控制磁头移动。非常麻烦且容易出错。于是操作系统引入(抽象出)了“文件“的概念。命名:每个文件都有一个文件名,方便用户和程序通过名字来找到它,而不是物理地址。文件路径文件名主干文件后缀文件路径分为绝对路径和相对路径。绝对路径是指从文件系统的根目录开始,完整描述文件或目录所在位置的路径。它提供了文件或目录的完整地址,无论当前工作目录在哪里,都能准确定位该文件。

weixin_45467593的博客 1252

C++ 文本读写与二进制读写的底层机制

1.文本打开在windows中,写入时会将\n换成\r\n,读出时\r\n会读出\nlinux对\n读写不做处理2.二进制打开对\n读写不做处理。

An15294874732的博客 246

transformer.js(三):底层架构及性能优化指南

Transformer.js 是在前端运行 Transformer 模型的一种创新性解决方案。通过解析其底层架构,我们了解了其如何通过模块化设计、流水线优化和硬件加速实现高效的性能表现。此外,借助量化、裁剪、并行处理等策略,开发者可以进一步提升模型性能,使其在实际项目中获得更好的响应速度和资源利用率。在未来,随着 WebGPU 的普及和 Transformer.js 社区的发展,我们可以期待更多创新的性能优化方法和应用场景。如果你想探索基于浏览器的自然语言处理,不妨试试 Transformer.js!

分享有趣的、贴近生活的CS知识 2375

python在word创建w:t元素

摘要:在python-docx中可直接操作XML元素设置文本,推荐使用w_t.text="内容"方式。该方法适用于精确控制文本格式的场景,会自动处理特殊字符转义。常规操作建议优先使用高级API(如run.text),仅在需要特殊处理时采用底层XML操作。可通过.xml属性验证生成的结构,注意文本样式由父元素决定。示例展示了从创建元素到保存文档的完整流程。

得塔云的博客 568
上一篇: LiteDB实践使用
下一篇: 深入浅出Java并发包—锁机制(一)
wingahi
博客等级 码龄15年 15粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值