python关于文件操作中的字符个数和字节数

记得刚开始学习python文件操作写文件的时候有个问题,很奇怪。最后知道了就是字节数的原因。

我们先来看个例子。

新建个文件存为utf-8命名为0117utf-8.txt记得去掉BOM头。

我们用r+模式尝试去修改

>>> fp=open("d:\\pydelete\\0117utf-8.txt","r+")
>>> fp.write("aa")
2
>>> fp.close()
>>>

结果如下

乱码一大坨。

这里就涉及了字节数了。

因为utf-8存中文是用3个字节存一个,存英文是用1个字节存一个英文字符。

如果写入“aaa”就可以了。

所以切入正题,看看字节数和字符个数。

1.fp.read(arg),fp.write()后返回的数字是字符个数。

我们用刚才写过的文件读一下看看。

>>> fp=open("d:\\pydelete\\0117utf-8.txt","r+",encoding="utf-8")
>>> fp.read(1)
‘a‘
>>> fp.read(1)
‘a‘
>>> fp.read(1)
‘a‘
>>> fp.read(1)    #可以看到这里的数字应该是字符个数,意思一个字符。
‘国‘
>>> fp.read(1)
‘话‘
>>> fp.read(1)
‘‘
>>>

我们再来写入一些内容。

>>> fp.seek(0.0)    #将游标切回行首
0.0
>>> fp.write("新写入2x")
5                            #可以看到这里也是字符个数。表示写入5个字符。
>>>fp.flush()

我们算一个结果之前文件内容是“aaa国话”我们写入“新写入2x” 之前的文件字节数是9,现在写入11 r+模式会从头开始覆盖所以现在文件内容为“新写入2x”

如果写入的字节数小于之前的有可能出现乱码(如果原文件有中文存在)

2.fp.tell(),fp.seek(0,0) 是字节数

我们加游标切回行首,再来读下。

>>> fp.seek(0,0)
0
>>> fp.read(1)
‘新‘
>>> fp.tell()
3                           #可以看出tell是返回的字节数,也就是游标现在应该在新字后边。
>>>

由此我们试着改变游标位置。

>>> fp.seek(0,0)

0
>>> fp.seek(6,0)    #seek的第一个参数也是字节数,那现在游标在哪我如果读一个字符应该是什么?  游标应该在写字后如果读一个字符应该是“入”

6

----------

>>> fp.read(1)
‘入‘

3.fp.truncate(size)

把文件裁成规定的大小,默认是裁到当前文件操作标记的位置。如果size 比文件的大小还要,依据系统的不同可能是不改变文件,

也能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。参数也是字节数。

我们来尝试一下

>>> fp.seek(0,0)
0
>>> fp.truncate(6)    
6
>>>

此时文件内容应该只剩下“新写”2字。

知道这些我们在写文件的时候,就能很清楚效果了。

关于字节数可以参考:

https://www.cnblogs.com/King-Tong/p/11431561.html

原文地址:https://www.cnblogs.com/King-Tong/p/12205194.html

时间: 2024-10-16 10:25:10

python关于文件操作中的字符个数和字节数的相关文章

Python基础-文件操作

1. 文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 语法 open(filename, mode) 实例 2. 文件打开模式 r,只读模式(默认). w,只写模式.[不可读:不存在则创建:存在则删除内容:] a,追加模式.[可读:   不存在则创建:存在则只追加内容:] "+" 表示可以同时读写某个文件 r+,可读写文件.[可读:可写:可追加] w+,写读 a+,同a "U"表示在读取时,可以将 \r \n \r\n自动转换

python 修改文件中的内容

在python的文件操作中,是没有办法对文件中具体某行或者某个位置的内容进行局部的修改的,如果需要对文件的某一行内容进行修改,可以先将文件中的所有的内容全部读取出来,再进行内容判断,是否是需要修改的内容,如果是就替换内容,并且将修改替换过的内容和没有修改的内容全部写入到新的文件中. # 打开旧文件 f = open('file_text.txt','r',encoding='utf-8') # 打开新文件 f_new = open('file_text_bak.txt','w',encoding

c语言判断是否是utf8字符串,计算字符个数

#include <stdio.h> #include <string.h> #include <stdlib.h> /**************************************************************************** Unicode符号范围 | UTF-8编码方式 (十六进制) | (二进制) 0000 0000-0000 007F:0xxxxxxx 0000 0080-0000 07FF:110xxxxx 10x

Java中字符编码和字符串所占字节数 .

首 先,java中的一个char是2个字节.java采用unicode,2个字节来表示一个字符,这点与C语言中不同,C语言中采用ASCII,在大多数 系统中,一个char通常占1个字节,但是在0~127整数之间的字符映射,unicode向下兼容ASCII.而Java采用unicode来表示字符,一个中文或英文字符的unicode编码都占2个字节,但如果采用其他编码方式,一个字符占用的字节数则各不相同. 在 GB 2312 编码或 GBK 编码中,一个英文字母字符存储需要1个字节,一个汉字字符存储

python基础(三)----字符编码以及文件处理

字符编码与文件处理 一.字符编码 由字符翻译成二进制数字的过程 字符--------(翻译过程)------->数字 这个过程实际就是一个字符如何对应一个特定数字的标准,这个标准称之为字符编码. 字符编码的发展史 阶段一:现代计算机起源于美国,最早诞生也是基于英文考虑的ASCII ASCII:一个Bytes代表一个字符(英文字符/键盘上的所有其他字符),1Bytes=8bit,8bit可以表示0-2**8-1种变化,即可以表示256个字符 ASCII最初只用了后七位,127个数字,已经完全能够代

补:小玩文件1-统计文本文件里的字符个数

输入代码: /* *Copyright (c)2015,烟台大学计算机与控制project学院 *All rights reserved. *文件名:sum123.cpp *作 者:林海云 *完毕日期:2015年8月18日 *版 本 号:v2.0 *问题描写叙述:统计文本文件abc.txt中的字符个数,填空将程序补充完整. *程序输入:文件读取. *程序输出:文本文件abc.txt中的字符个数. */ #include <iostream> #include <cstdlib> #

python 读写文件和设置文件的字符编码

一. python打开文件代码如下: f = open("d:\test.txt", "w") 说明:第一个参数是文件名称,包括路径:第二个参数是打开的模式mode ‘r’:只读(缺省.如果文件不存在,则抛出错误)‘w’:只写(如果文件不存在,则自动创建文件)‘a’:附加到文件末尾‘r+’:读写 如果需要以二进制方式打开文件,需要在mode后面加上字符”b”,比如”rb””wb”等 二.python读取文件内容f.read(size) 参数size表示读取的数量,可

python学习笔记(集合的使用、文件操作、字符编码与转码、函数)

集合 集合(set):把不同的元素组成一起形成集合,是python基本的数据类型. 集合元素(set elements):组成集合的成员 为什么需要集合? 集合的作用 1 .列表去重复数据 按照现有知识的解决思路:先设置空列表,然后使用for寻获,把需要去重的列表的第一个数据放到新列表中,然后依次取出第二个数据,把第二个数据和第一个数据作比较,如果不一样,则存入新列表中:以此类推,每取一次都要和新列表中的数据作对比,不一样的则添加入新列表中. 2. 关系测试 比如有学员同时报了python班和l

补:小玩文件1-统计文本文件中的字符个数

输入代码: /* *Copyright (c)2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:sum123.cpp *作 者:林海云 *完成日期:2015年8月18日 *版 本 号:v2.0 *问题描述:统计文本文件abc.txt中的字符个数,填空将程序补充完整. *程序输入:文件读取. *程序输出:文本文件abc.txt中的字符个数. */ #include <iostream> #include <cstdlib> #includ