file打开文件有两种方式,函数用file()或者open()。打开后读入文件的内容用read()函数,其读入是从文件当前指针位置开始,所以需要控制指针位置用:

一、先介绍下file读入的控制函数:

seek(offset,where): where=0从起始位置移动,1从当前位置移动,2从结束位置移动。当有换行时,会被换行截断。seek()无返回值,故值为None。

# 将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供了where参数就不一定了, where可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。

            seek()的三种模式:

(1)f.seek(p,0) 移动当文件第p个字节处,绝对位置

(2)f.seek(p,1) 移动到相对于当前位置之后的p个字节

(3)f.seek(p,2) 移动到相对文章尾之后的p个字节

for instance:

inputfile= file('g:\\observer_report_20130915155111')

    #for line in filecontent.readline():

    #print inputfile.readline()

    #print inputfile.tell()

    #print inputfile.seek(0,0)

    #print inputfile.tell()

tell(): 返回文件的当前位置,即文件指针当前位置,以文件开头为原点,受seek、readline、read、readlines影响,不受truncate影响

truncate(n): 从文件的首行首字符开始截断,截断文件为n个字符;无n表示从当前位置起截断;截断之后n后面的所有字符被删除。其中win下的换行代表2个字符大小。

注意:truncate()这个函数跟文件指针位置无关。每次执行都是从文件开始处执行,也就是seek(0,0)的位置开始,截取指定参数的n个字符,其它的全部删除。所以要用a+(a不行)或是r+。如果用w+模式会读出空,因为w是先删除再写,一定不要用。执行结果为,只剩文件开头的n个字符。

read()读入所有行内容

readline(n):n为空时读入一行,默认读入当前行,开始读取的位置为tell()+1。n为一行中读入的字节数,不满一行的就取出部分(当前行的前n个字符),超出一行的只读一行。

readlines()读入所有行内容,按行读入,读入的内容为一行行。

另外,注意,新python,加入两个函数xreadline()和xreadlines(),其将读入的行作为类似列表的独立对象,返回的行可以独立按对象进行相关操作。

二、以下以1个例子说明以上各个函数的作用

fso = open("f:\\a.txt",'w+') '以w+方式,并非a方式打开文件,故文件原内容被清空

print fso.tell() '文件原内容被清空,故此时tell()=0

fso.write("abcde\n") '写入文件abcde\n,因为换行\n占两个字符,故共写入7个字符

print fso.tell() '此时tell()=7

fso.write("fghwm") '又写入文件fghwm,故此时文件共写入7+5 =12个字符

print fso.tell() '此时tell()=12

fso.seek(1, 0) '从起始位置即文件首行首字符开始移动1个字符

print fso.tell() ‘此时tell() =1

print fso.readline() '读取当前行,即文件的第1行,但是从第二个字符(tell()+1)开始读,结果为:bcde。

'若换成for读取整个文件或read读取整个文件则结为bcdefghwm

print fso.tell() ‘因为readline此时tell() =7,

fso.truncate(8) '从写入后文件的首行首字符开始阶段,截断为8个字符,即abcde\nf,即文件的内容为:abcde\nf

print fso.tell() ‘tell() 依旧为7,并为受truncate(8)影响,但是此时文件内容为abcde\nf

print fso.readline() ‘从tell()+1=8开始读取,读取当前行内容:f

fso.close()

#打开文件和进行写操作

f=open(‘test.txt’,'w’)

f.write(‘hello’)

f.writelines(['hi','haha'])#多行输入

f.close()

#append data

f=open(‘test.txt’,'a’)

f.write(‘hello’)

f.writelines(['hi','haha'])

f.close()

#连续写入后会自动关闭

open(‘test.txt’,'a’).write(‘11111\r\n’)

#把result里的元素依次填到open函数里去

result={‘hello’,'u’}

exec open(‘test.txt’) in result

#

selected = [] # temp list to hold matches

fp = open(‘test.txt’)

for line in fp.readlines(): # Py2.2 -> “for line in fp:”

selected.append(line)

del line # Cleanup transient variable

#

open(‘test.txt’).readlines()

file在python是一个特殊的类型,用于外部文件的操作。python中一切都是对象,file也不例外,file有file的方法和属性。

创建一个file对象:* file(name[, mode[, buffering]])

file()函数:创建一个file对象,它有一个别名叫open(),更形象一些,它们是内置函数。参数是以字符串的形式传递的。

name是文件的名字。

mode 是打开的模式,可选的值为r w a U,分别代表读(默认) 写 添加支持各种换行符的模式。用w或a模式打开文件的话,如果文件不存在,那么就自动创建。此外,用w模式打开一个已经存在的文件时,原有文件的内容会被清空,因为一开始文件的操作的标记是在文件的开头的,这时候进行写操作,无疑会把原有的内容给抹掉。由于历史的原因,换行符在不同的系统中有不同模式,比如 在 unix中是一个\n,而在windows中是‘\r\n’,用U模式打开文件,就是支持所有的换行模式,也就说‘\r’ ‘\n’ ‘\r\n’都可表示换行,会有一个tuple用来存贮这个文件中用到过的换行符。不过,虽说换行有多种模式,读到python中统一用\n代替。在模式
字符的后面,还可以加上+ b t这两种标识,分别表示可以对文件同时进行读写操作和用二进制模式、文本模式(默认)打开文件。

buffering如果为0表示不缓冲;如果为1表示进行“行缓冲“;如果是一个大于1的数表示缓冲区的大小,应该是以字节为单位的。

filfile的属性主要有:

* closed #标记文件是否已经关闭,由close()改写

* encoding #文件编码

* mode #打开模式

* name #文件名

* newlines #文件中用到的换行模式,是一个tuple

* softspace #boolean型,一般为0,据说用于print

file的其他方法:

* F.close()

#关闭文件。python会在一个文件不用后自动关闭文件,不过这一功能没有保证,最好还是养成自己关闭的习惯。如果一个文件在关闭后还对其进行操作会产生ValueError

* F.flush()

#把缓冲区的内容写入硬盘

* F.fileno()

#返回一个长整型的”文件标签“

* F.isatty()

#文件是否是一个终端设备文件(unix系统中的)

* F.next()

#返回下一行,并将文件操作标记位移到下一行。把一个file用于for … in file这样的语句时,就是调用next()函数来实现遍历的。

python的文件操作file:(内置函数,如seek、truncate函数)的更多相关文章

  1. 文件操作,内置函数open()

    先看看官方说明: The default mode is 'r' (open for reading text, synonym of 'rt'). For binary read-write acc ...

  2. python元祖操作和内置方法

    1 元祖:元祖可以理解为一个不可变的列表 2 用途:用于存放多个值,当存放的多个值只有读的需求而没有改的需求时用元祖最合适 3 定义:在()内用逗号分隔开多个任意类型的值.注意:当只有一个元素的时候, ...

  3. 【python】-- 文件操作

    一.概述 我们工作中需要经常操作文件,下面就讲讲如何用Python操作文件 1.文件操作的流程: 打开文件,得到文件句柄赋值给一个变量 通过文件句柄,对文件进行操作 关闭文件 #获取文件句柄 f = ...

  4. Python学习(八) —— 内置函数和匿名函数

    一.递归函数 定义:在一个函数里调用这个函数本身 递归的最大深度:997 def func(n): print(n) n += 1 func(n) func(1) 测试递归最大深度 import sy ...

  5. python基础12_匿名_内置函数

    一个二分查找的示例: # 二分查找 示例 data = [1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35, 36, ...

  6. 【python之路46】内置函数2,是【python之路18】的补充

    将3.5版本中的68个内置函数,按顺序逐个进行了自认为详细的解析.为了方便记忆,将这些内置函数进行了如下分类: 数学运算(7个) 类型转换(24个) 序列操作(8个) 对象操作(7个) 反射操作(8个 ...

  7. Python 2.7 学习笔记 内置语句、函数、标准库

    使用任何开发语言进行软件开发,都离不开语言提供的内置库(或Api),甚至说内置库的强大及使用是否方便都会影响大家对开发语言的选择. python语言,一样提供了很多内置的功能,可供开发时使用.主要有如 ...

  8. 文件操作(FILE)与常用文件操作函数

    文件 1.文件基本概念 C程序把文件分为ASCII文件和二进制文件,ASCII文件又称文本文件,二进制文件和文本文件(也称ASCII码文件)二进制文件中,数值型数据是以二进制形式存储的, 而在文本文件 ...

  9. Python 常见文件操作的函数示例(转)

    转自:http://www.cnblogs.com/txw1958/archive/2012/03/08/2385540.html # -*-coding:utf8 -*- ''''' Python常 ...

随机推荐

  1. Python小代码_5_二维矩阵转置

    使用列表推导式实现二维矩阵转置 matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] print(matrix) matrix_t = [[ro ...

  2. jmeter分布式测试远程连接失败

    jmeter分布式部署其实很简单.但今天测试的时候发现了一个坑,远程连接一直失败. 原因:服务器上部署了slave,而这台服务器上有多个网卡.举个例子:ip分别为:192.168.100.6,10.1 ...

  3. Thread 调用方法的方式

    1.传统ThreadStart 2.ParameterizedThreadStart 3.委托thread = new Thread(delegate() { NoticeBroadcast(user ...

  4. c++ Lambda表达式待修改

    C++11引入了lambda表达式,使得程序员可以定义匿名函数,该函数是一次性执行的,既方便了编程,又能防止别人的访问. Lambda表达式的语法通过下图来介绍: 这里假设我们定义了一个如上图的lam ...

  5. 初始化mysql数据库——Activiti BPM

    package com.initialize; import org.activiti.engine.ProcessEngine; import org.activiti.engine.Process ...

  6. Git 常用命令速查表(图文+表格)

    一. Git 常用命令速查 git branch 查看本地所有分支git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支git branch -r ...

  7. 详解BLE 空中包格式—兼BLE Link layer协议解析

    BLE有几种空中包格式?常见的PDU命令有哪些?PDU和MTU的区别是什么?DLE又是什么?BLE怎么实现重传的?BLE ACK机制原理是什么?希望这篇文章能帮你回答以上问题. 虽然BLE空中包(pa ...

  8. Spinner控件详解

    Spinner控件详解 效果图 修改Spinner样式 在介绍之前,先看一下系统原生的样式 6.x & 5.x系统样式 4.x系统样式 官方文档 XML属性 方法 描述 android:dro ...

  9. Java格式化时间

    Java格式化时间 将秒或者毫秒值格式化成指定格式的时间 效果图 工具类 工具类里我只列出了一种格式的格式化方式,可以根据自己的需求,修改"yyyy-MM-dd hh:mm:ss" ...

  10. Excel 、数据库 一言不合就转换

    Excel 与数据库 对于从事相关行业的小伙伴们而言,可谓是再熟悉不过了,但是面对这两者的转换,你是否已经手忙脚乱,乃至焦头烂额? 还好,今后你将不再受此折磨.不再有日日夜夜加班导入数据的枯燥工作,不 ...