python 文件指针在文件末尾_python文件操作及seek偏移详解

一、python文件操作中的编码

本次测试是基于python 2.7.12   OS:Ubuntu16.04  pycharm环境,以及win7下2.7.12;

首先说下汉字在文件中占用的字节数,这个先看以下实验(win7)下 因为linux下不支持gbk,本文不讲utf-8 ,gbk编码具体知识,有兴趣可以访问http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html或自行搜索相当资料。本次实验只讲解python在使用utf-8和gbk编码时,对汉字占用的字节有所不同。

先看下实验截图:

右上解的代码如下:#-*- coding: utf-8 -*-

with open("test2.txt","w") as f:

f.write("董hellow world!")

f.write("Python is a good language!\n")

f.write("Python 是世界上最好的语言!")

with open("test2.txt","r") as f:

print(len(f.read()))

f.seek(0)

print f.read(2)

f.seek(0)

print f.read(3)

f.tell()

保存运行(F5) 运行结果为图左上角 出现长度78  和汉字"董"的乱码 再次从头读3个字节 可以正确显示“董”

右下解的代码如下:#-*- coding: gbk -*-

with open("test3.txt","w") as f:

f.write("董hellow world!")

f.write("Python is a good language!\n")

f.write("Python 是世界上最好的语言!")

with open("test3.txt","r") as f:

print(len(f.read()))

f.seek(0)

print f.read(2)

f.tell()

保存运行(F5)运行结果为图左下角 出现长度为68  能正确显示“董”

test2.txt 和test3.txt中的内容均一样,只是在不同的编码下存入文件中!

从实验可以看出汉字在utf8编码下占3个字节,gbk下占2个字节,而英文不管在那个编码下都只占1个字节!

二、python文件操作

搞清楚以上问题我们可以通过操作文件来读取内容,以防止是乱码。

1、python文件操作主要通过file(3版本去掉了), open(2,3版本均有)函数来实现

open函数中最主要的几个模式说明及对比:模式打开方式文件存在文件不存在

r只读打开文件出错

w只写清除原有文件内容创建并打开新文件

a只写(追加)保留文件内容,将新数据添加到文件末尾创建并打开新文件

r+读写从文件开始处读或重写文件内容出错

w+读写清除文件内容创建并打开新文件

a+读写保留文件内容,将新数据添加到文件末尾创建并打开新文件

注:如是是对二进制文件操作即在以上模式中加一个b 如读二制文件rb

2、文件操作方法实验

f.write()    #字符串写入文件

f.writelines   #将一串字符串写入文件。 该序列可以是生成字符串的任何可迭代对象,通常是字符串列表

f.read([size])   #默认读出文件中所有内容,可以指定size(字节)

f.readline([size])        #默认每次读取一行,字符串中保留一个尾随的换行字符。

f.readlines([size])      #默认将文件内容讲到列表中保存

f.flush()        #将缓冲中的内容写入磁盘

f.tell()       #显示当前文件的指针所在位置

f.close()    #关闭打开的文件

f.seek()       #对文件进行指针偏移操作,有三个模式,

seek(0,0) 默认移动到文件开头或简写成seek(0)

seek(x,1) 表示从当前指针位置向后移x(正数)个字节,如果x是负数,则是当前位置向前移动x个字节

seek(x,2) 表示从文件末尾向前后移x(正数)个字节,如果x负数,则是从末尾向前移动x个字节

3、对文件seek详细说明

实验代码如下:

先创建一个文件file2.txt# -*- coding: utf-8 -*-

f = open("file2.txt",‘w+‘)

f.write("I love python\n")

f.write("python 是世界上最美丽的语言!\n")

f.write("python 世界上最美丽的语言?")

file2.txt内容如下:

I love python

python 是世界上最美丽的语言!

Python 世界上最美丽的语言

对file2.txt进行操作f = open("file2.txt",‘r‘)

print(len(f.read()))     #文件总长度 89

print(f.tell())          #读完文件,文件指针位置89

f.seek(0,0)              #偏移回文件头

print(f.readline())      #打印出文件中一行(第一行)

print f.tell()           #显示文件指针现在的位置

f.seek(2,1)              #从当前文件指针(向后)偏移2个字节

print(f.readline())      #再打印一行(应该少2个字节)

print(f.tell())          #显示 现在 的指针位置

f.seek(-7,1)             #从当前位置向前偏移2个字节

print(f.readline())      #打印下一行

print(f.tell())          #显示 现在 的指针位置

f.seek(-9,2)             #从尾部向前偏移9个字符

print(f.tell())          #显示 现在 的指针位置

print(f.readline())      #打印出内容

f.seek(0)  #==>默认是0 等等seek(0,0)

f.seek(80)      #等同上面的seek(-9,2) 从尾部取

print(f.readline())

结果如图:

本文均为在学习过程中的实验结果,可能不同版本不同平台略有误差,如有不当之处,欢迎指正交流!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/427223.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker小实战和应用

1运行一个docker 一开始docker进不去,需要去https://hub.docker.com注册一个 2docker info查看信息 3docker run ubuntu echo hello world 查看第一个命令输出 4docker images 查看本地的镜像 5查看开启的容器和没有开启的容器 Docker ps -a 6 docker pull ngi…

java 窗口 单例_java单例模式实现面板切换

本文实例为大家分享了java单例模式实现面板切换的具体代码,供大家参考,具体内容如下1、首先介绍一下什么是单例模式:java单例模式是一种常见的设计模式,那么我们先看看懒汉模式:public class Singleton_ {//设为私有方…

java垃圾回收机制_干货:Java 垃圾回收机制

什么是自动垃圾回收?自动垃圾回收是一种在堆内存中找出哪些对象在被使用,还有哪些对象没被使用,并且将后者删掉的机制。所谓使用中的对象(已引用对象),指的是程序中有指针指向的对象;而未使用中的对象(未引用对象)&…

java项目定时任务_java项目定时任务实现

首先配置spring-context.xml文件在xmlns 下加如下代码xmlns:task"http://www.springframework.org/schema/task"在xsi:schemaLocation里添加如下代码http://www.springframework.org/schema/taskhttp://www.springframework.org/schema/task/spring-task-3.1.xsd还有…

enter power save mode解决

这个问题是什么产生的呢?这是我刚来公司的第三天,公司停电,等重新来电的时候有三台电脑都出现了这个问题。连接显示屏没有反应 遇到这种问题,首先这是主机没有正常启动引起的 1第一步:先插拔下电源,重新启动…

python多线程编程_Python 多线程编程

Thread类classThread:def __init__(self,groupNone,targetNone,nameNone,args(),kwargsNone,*,daemonNone)group:None,为日后扩展 ThreadGroup 类实现而保留。target&…

linux修改网卡名(亲测有效)

1查看网卡ip addr 2cd /etc/sysconfig/network-scripts Ls查看 3mv ifcfg-eno16777736 ifcfg-eth0重命名,然后编辑 最后一行加入IPADDR192.168.30.136 NETMASK255.255.255.0 HWADDR00:0C:29:aa?2f BOOTPROTO改成static 4 vi /etc/default/grub 5 grub2-mkconfig…

java 存储空间_Java中的存储空间类型

在Thinking in java里,列举了Java的六种存储类型1.寄存器编写过汇编程序的应该对寄存器非常熟悉,那时候用的ax,bx,cx,dx等等。寄存器在CPU里面,所以速度特别快,但是数量非常有限。在java中无法直…

读取html文件,让其中的内容和notepad打开这个html的样子一样。

然后我写了个python代码,让其读取这个html文件后,内容和这个一样: htmlfopen(13144815898.html,r,encoding"utf-8") htmlconthtmlf.read() print((htmlcont)) 转载于:https://www.cnblogs.com/www-caiyin-com/p/9447285.html

python默认参数举例_Python中的默认参数实例分析

本文研究的主要是Python中的默认参数的相关内容,具体如下。熟悉C语言的可以知道,C语言中的默认参数是写在函数声明中的,为语法糖,与函数的调用无关,是在函数调用的时候由编译器补齐参数然后进行调用。而Python中的默认…

centos安装ipconfig和telnet命令

1我安装的是mini版的 2首先ipconfig查看不到命令 yum -y install net-tools 解决 3在同事的要求下要安装telnet 首先 rpm -qa telnet-server yum -y install telnet-server rpm -qa telnet yum -y install telnet rpa -qa xinetd yum -y install xinetd 测试 netstat -tnl …

java 对象访问权限_Java面向对象编程之访问控制权限

5. 访问控制权限5.1 类型(4个)privatepublicprotected默认权限5.2 作用private : 私有的,只能类内部访问public : 可以在任何位置访问,类内部访问,对象访问protected: 被本类,和本类的子类访问默认权限:可以…

38. 统计一个整数的二进制表示中bit为1的个数

参考: https://www.cnblogs.com/graphics/archive/2010/06/21/1752421.html 转载于:https://www.cnblogs.com/GrimMjxCl/p/9452667.html

python3.7怎么使用arcpy_从Python到空间分析Arcpy|1.3.7 神啊!救救我之如何处理报错...

今天讲的是关键时候不卡壳的技能,尤其是循环语句中和数据清洗中,先假设一种情况,领导安排你把,某机构给你们的坐标x和y数据列表中的每个元素的x偏移3个单位,假设你现在已经可以掌握相关的内容了,心里想太ea…

dockerfile使用(一)

1mkdir dl Cd dl Touch Dockerfile 2修改配置vi Dockerfile FROM alpine:latest MAINTAINER xbf CMD echo ‘hello docker’ 3 docker build -t hello_docker . 4 docker images 5 docker run hello_docker

java程序设计实验报告册_20145215《Java程序设计》实验一实验报告

实验一 Java开发环境的熟悉实验内容及步骤使用JDK编译、运行简单的Java程序命令行下程序开发:在命令行下建立实验目录,进入该目录后创建exp1目录敲入以下代码:package exp1;import java.util.Scanner;public class Hello{public static void …

异步汇合

//多个异步请求完成后汇总结结果(任务执行不区分先后顺序) dispatch_queue_t queue dispatch_get_global_queue(0,0); dispatch_group_t group dispatch_group_create(); dispatch_group_async(group, queue, ^{/*任务a */ }); dispatch_group_async(g…

dockfile应用(二)

1创建目录dl2 Cd dl2 Touch dockerfile Touch index,html 2ROM ubuntu MAINTAINER xbf RUN sed -i ‘s/archive.ubuntu.com/mirrors.ustc.edu.cn/g’ /etc/apt/sources.list RUN apt-get update RUN apt-get install -y nginx COPY index.html /var/www/html ENTRYPOINT [&quo…

python实验九答案_Python实验九

安徽工程大学python程序设计实验报告班级:物流191 姓名:王悦 学号:3190505103 日期:2020.6.16 指导老师:修宇【实验名称】实验九python包管理【实验目的】进一步了解python的计算生态,…

java gb13000_浅谈 GB13000

引言我前几天写了一篇随笔“随机生成常用汉字(再次改进版)”。园友“菜菜灰”评论说“看着太累,不认识的字还是多,代码也很多,几段代码显示2万多汉字”,并给出了相应的 C# 代码:1 System.Text.StringBuilder sb newSy…