文本与二进制关于\n的问题

文本文件中: text = open(path, "r");windows中的换行符\n,在文件中windows在存储的时候会将它看成\r\n存储,在读取大小时会忽略\r的大小.

解决的办法由两种:

1.使用“rb”打开文件  text = open(path, "rb");

2.在读取到\n的时候再加1,算上\n的大小。

注意:\r和\n的大小都是1个字节

时间: 2024-10-14 04:22:07

文本与二进制关于\n的问题的相关文章

文本与二进制方式打开文件的区别

文本与二进制方式打开文件的区别 文本文件也叫做ASCII码文件,与以‘文本方式’打开文件不是同一个概念!文本文件存储的是ASSCII码字符,即存储在磁盘上只占用二进制的0x20--0x7e.另外,还有回车(0x0d),换行(0x0a),TAB(0x09)等,所以有可压缩的空间. 换行和回车是不同的,而且在不同的操作系统,解释也不相同.‘\n’一般会操作系统被翻译成"行的结束",即LF(Line-Feed):‘\r’会被翻译成"回?,即CR(Cariage-Return) 回车

《Python CookBook2》 第一章 文本 - 过滤字符串中不属于指定集合的字符 && 检查一个字符串是文本还是二进制

过滤字符串中不属于指定集合的字符 任务: 给定一个需要保留的字符串的集合,构建一个过滤函数,并可将其应用于任何字符串s,函数返回一个s的拷贝,该拷贝只包含指定字符集合中的元素. 解决方案: import string allchars = string.maketrans('','') #all chars table def makefilter(keep): delchars = allchars.translate(allchars,keep) def thefilter(s): retu

jdbc基础 (三) 大文本、二进制数据处理

LOB (Large Objects)   分为:CLOB和BLOB,即大文本和大二进制数据 CLOB:用于存储大文本 BLOB:用于存储二进制数据,例如图像.声音.二进制文件 在mysql中,只有BLOB,没有CLOB,mysql存储大文本用TEXT TEXT  分为:TINYTEXT.TEXT.MEDIUMTEXT和LONGTEXT BLOB 分为:TINYBLOB.BLOB.MEDIUMBLOB和LONGBLOB 取值范围如下图: 下面来看具体的代码实现: 1 package com.cr

文本IO 二进制IO

一.文本IO 使用PrintWriter写入文件后,必须调用close(),否则数据不能正确保存在文件中. Scanner的next()读取一个由分隔符分隔的字符串,nextLine()读取以换行符结束的行. 标记读取不会读取分隔符,所以nextLine()会把所有标记也算作一个标记进行读取. useDelimiter(String s)可以改变分隔符,默认是空格. 从URL读取数据,创建URL对象,调用url.openStream(),就可以用Scanner读取url.openStream()

文本和二进制的加密及获取二进制文件的大小

1.EOF 在C语言中,或更精确地说成C标准函数库中表示文件结束符(end of file).在这种以EOF作为文件结束标志的文件,必须是文本文件.在文本文件中,数据都是以字符的ASCII代码值的形式存放.我们知道,ASCII代码值的范围是0~127,不可能出现-1,因此可以用EOF作为文件结束标志. 2.函数feof 函数原型: int feof(FILE *fp) 功能:判断文件是否结束 返回值:文件结束,返回真(非0),文件未结束,返回0 3.实例 非密码加密  txt #define _

【C/C++学院】0826-文件重定向/键盘输入流/屏幕输出流/字符串输入输出/文件读写简单操作/字符文件读写二进制与文本差别/get与getline挖掘数据/二进制与文本差别/随机位置/多线程初级

文件重定向 #include<iostream> using namespace std; void main() { char str[30] = { 0 }; cin >> str; cout << str; system(str); cerr << "error for you"; cin.get(); cin.get(); } 键盘输入流 #include<iostream> #include <stdlib.h

二进制与文本格式

1. 文本文件与二进制文件的定义 大家都知道计算机的存储在物理上是二进制的,所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的.这两者只是在编码层次上有差异. 简单来说,文本文件是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等等.二进制文件是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思(这样一个过程,可以看作是自定义编码). 从上面可以看出文本文件基本上是定长编码的(也有非定长的编码如UTF-8),基于字符嘛,每个字符在具体编码中是固定的,ASCII码

Memcached 二进制协议(BinaryProtocol) incr指令泄露内存数据的bug

缘起 最近有个分布式限速的需求.支付宝的接口双11只允许每秒调用10次. 单机的限速,自然是用google guava的RateLimiter. http://docs.guava-libraries.googlecode.com/git-history/master/javadoc/com/google/common/util/concurrent/RateLimiter.html 分布式的ReteLimiter,貌似没有现在的实现方案.不过用memcached或者Redis来实现一个简单的也

读写文本数据

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 17.0px Helvetica; color: #29556f } 使用其他分隔符或行终止符打印 问题: 你想使用print() 函数输出数据,但是想改变默认的分隔符或者行尾符. 解决方案: 可以使用在print() 函数中使用sep 和end 关键字参数,以你想要的方式输出.比如: 1 #正常输出 2 print('dmeon', 89 , 8, 23) 3 4 #指定分隔符, 5 print('dm