我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python文件操作及seek偏移详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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编码时,对汉字占用的字节有所不同。

先看下实验截图:

wKioL1lXXvzQh-t4AACbOKqpXTw923.png-wh_50


右上解的代码如下:

#-*- 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())

结果如图:

wKiom1lXWwaR19haAAQ7CNh4G2U611.png-wh_50


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

python文件操作及seek偏移详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python文件操作及seek偏移详解

一、python文件操作中的编码       本次测试是基于python 2.7.12   OS:Ubuntu16.04  pycharm环境,以及win7下2.7.12;首先说下汉字在文件中占用的字节数,这个先看以下实验(win7)下 因
2023-01-31

python文件操作详解

文件操作是编程中必不可少的,配置文件,数据存储都是对文件操作;按文件操作与格式主要内容如下图:文件基本操作为打开,读取,写入,关闭,我们按这个过程来详解讲解。1.一个例子搞定打开,读取与关闭:准备工作:1>新建文件:E:\workdir\r
2023-01-31

python 移动文件或文件夹操作

目录:1、python中对文件、文件夹操作时经常用到的os模块和shutil模块常用方法2、文件操作方法大全3、目录操作方法大全————————————————————————————–1、python中对文件、文件夹操作时经常用到的os模
2023-01-31

详解Python中的文件操作

1.能调用方法的一定是对象,比如数值、字符串、列表、元组、字典,甚至文件也是对象,Python中一切皆为对象。str1 = 'hello'str2 = 'world'str3 = ' '.join([str1,str2])print(str
2022-06-04

Android 文件操作详解及简单实例

Android 文件操作详解 Android 的文件操作说白了就是Java的文件操作的处理。所以如果对Java的io文件操作比较熟悉的话,android的文件操作就是小菜一碟了。好了,话不多说,开始今天的正题吧。 先从一个小项目入门吧 首
2022-06-06

Node.js文件操作详解

Node有一组数据流API,可以像处理网络流那样处理文件,用起来很方便,但是它只允许顺序处理文件,不能随机读写文件。因此,需要使用一些更底层的文件系统操作。 本章覆盖了文件处理的基础知识,包括如何打开文件,读取文件某一部分,写数据,以及关闭
2022-06-04

Python复制文件操作实例详解

本文实例讲述了Python复制文件操作用法。分享给大家供大家参考,具体如下: 这里用python实现了一个小型的自动发版本的工具。这个“自动发版本”有点虚, 只是简单地把debug 目录下的配置文件复制到指定目录,把Release下的生成文
2022-06-04

Python高级文件操作之shutil库详解

前言 什么算是高层的文件操作呢? 普通的文件操作,我们一般只涉及创建文件,文件夹以及写入文件等等。假如我现在需要复制一个文件的内容到另一个文件之中,用pathlib等都只能先打开复制文件,然后进行将其读出来保存,然后再写入新的文件,这种普通
2022-06-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录