文件操作

打开文件

open(name[,mode[,buffering]])   open函数使用一个文件名作为强制参数,然后返回一个文件对象。[python 3.5 把file()删除掉]
 
with open(somefile.txt,'r') as files:
  do_something(files)
with 语句打开文件并把值赋值到变量,之后可以对文件操作。文件在语句结束之后会自动关闭,即使异常引起也会退出。
 
文件模式
r   #只读模式(默认)
w(>) #写模式
a (>>)  #追加模式
b (二进制模式,如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注;可添加到其他模式中使用)
+ (读/写模式,可添加到其他模式中使用)
U (表示在读取时,可以将 \r \n \r\n自动转换成 \n 与 r 或 r+ 模式同使用)
 
基本文件方法:
读文件内容
#一次性读取所有内容到内存
obj.read()
#读取文件中的所有行并将其作为列表返回
obj.readlines()
#一次仅读取一行(从当前位置开始一直到一个换行符的出现,也读取这个换行符)
obj.readline()
 
写文件内容
#写入字符串
obj.write('内容')
#写入字符串列表(实际上任何序列和可迭代的对象都行),它会把所有的字符串写入文件。
writelines(list)
 
随即访问
seek(offset[,whence])
把当前位置(进行读和写的位置)移动到由offset定义的位置,whence.offset是一个字节(字符)数,whence默认是0,表明偏移量是从文件头
开始计算的(偏移量必须是非负的)whence可以被设置为1(相对于当前位置的移动,offset可以是负的)或者2(相对于文件结尾的移动 )
f = open('test2.txt','w')
f.write('')
f.seek()
f.write('hello, world!')
f.close()
f = open('test2.txt','r')
line = f.read()
print(line)
f.close() 01234hello, world!89 truncate #截断数据,仅保留指定之前数据
f = open('test2.txt')
f.seek(4)
f.truncate() #截断f.seek(4)以后的所有数据,仅保留之前的。
f.close()

tell返回当前文件的位置

f = open('test2.txt')
f.read()
f.read()
print(f.tell())
f.close()
5 #假设文件中包含中文
f = open('test2.txt','r',encoding='utf-8')
a = f.seek(2) #文件报错,因为一个汉字占3个字节,seek是按照字节位移 (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbd in position 0: invalid start byte b = f.read(2) #读取字符,(在以前版本中一个汉字占3个字节,单读取2个字节将会出现乱码)
print(a)
c = f.tell() #返回值还是按照字节来的。
print(b) 好0
4
 
关闭文件
obj.close()
如果想确保文件被关闭了,可以使用try/finally语句,并且在finally自居中调用close方法。
#Once your file here
try:
#Write data to your file
finally:
file.close()

迭代文件内容和文件对象

read(),readline(),readlines()前面都已经提到过,下面介绍另一种方法fileinput

在对一个比较大的文件进行迭代行的操作时,readlines()会占用大量的内存,既可以使用while循环和readline,还可以使用for循环来实现行的迭代。

import fileinput
for line in fileinput.input(filename): #便于遍历多个输入流中的行。
print(line)

fileinput模块中的函数

input(files[,inplace[,backup]])   #便于遍历多个输入流中的行

filename()              #返回当前文件的名称

lineno()              #返回当前(累计)的行数

filelineno()              #返回当前文件的行数

isfirst()              #检查当前行是否是文件的第一行

isstding()             #检查当前最后一行是否来自sys.stdin

nextfile()              #关闭当前文件,移动到下一个文件

close()               #关闭序列

文件迭代器

f = open(filename)
for i in f:
print(i)
f.close()

可以对文件迭代器执行和普通迭代器相同的操作,比如将它们转换为字符串列表(list(open(filename))),这样所达到的效果和readlines一样。

f = open('log.txt','w')
f.write('aaa\n')
f.write('bbb\n')
f.write('ccc\n')
f.write('ddd\n')
f.close()
lines = list(open('log.txt'))
print(lines) ['aaa\n', 'bbb\n', 'ccc\n', 'ddd\n']

python学习笔记三 文件操作(基础篇)的更多相关文章

  1. python学习笔记(三):文件操作和集合

    对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句柄操作文件 3.关闭文件. 文件基本操作: f = open('file.txt','r') #以只读方式打开一个 ...

  2. python学习笔记三 函数(基础篇)

    函数 内置函数 常用的内建函数: type()  列出指定对象的类型 help()  能够提供详细的帮助信息 dir()    将对象的所有特性列出 vars()  列出当前模块的所有变量 file, ...

  3. python学习笔记之文件操作(三)

    这篇博客小波主要介绍一下python对文件的操作 对文件的操作主要分为三步: 1.打开文件获取文件的句柄,句柄也是文件描述符 2.通过文件句柄操作文件 3.关闭文件. 现有以下文件,是小波随写的周杰伦 ...

  4. Python学习笔记 - day5 - 文件操作

    Python文件操作 读写文件是最常见的IO操作,在磁盘上读写文件的功能都是由操作系统提供的,操作系统不允许普通的程序直接操作磁盘(大部分程序都需要间接的通过操作系统来完成对硬件的操作),所以,读写文 ...

  5. python学习笔记:文件操作和集合

    一.文件操作 文件读写步骤:有一个文件,打开文件,操作文件读写文件,关闭文件. python 文件读写模式r,r+,w,w+,a,a+的区别(附代码示例) 模式 可做操作 若文件不存在 是否覆盖 r ...

  6. python学习笔记4(文件操作)

    文件操作: 1.f=open(”caidan”,”w”,encoding=”utf8”)      直接打开一个文件,如果文件不存在则创建文件 f.close() 2.with open (”caid ...

  7. python学习笔记(六)---文件操作与异常处理机制

    文件读取 读取整个文件 要读取文件,需要一个包含几行文本的文件.下面首先来创建一个文件,它包含精确到小数点后30位的圆周率值,且在小数点后每10位处都换行: pi_digits.txt 3.14159 ...

  8. 我的Python学习笔记之文件操作

    一,Python的文件类型有两种 1.文本文件 2.二进制文件 文件的操作: 1.打开文件,获取文件的控制权 2.读写文件 3.关闭文件,释放文件的控制权,如果不释放控制权,那么其他程序就不能访问此文 ...

  9. python学习笔记二 数据类型(基础篇)

    Python基础 对于Python,一切事物都是对象,对象基于类创建         不同类型的类可以创造出字符串,数字,列表这样的对象,比如"koka".24.['北京', '上 ...

随机推荐

  1. C++之路进阶——codevs4416(FFF的后宫)

    4416 FFF 团卧底的后宫  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold       题目描述 Description 你在某日收到了 FFF 团卧底的求 ...

  2. ajax常用参数

    url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址.前台跳转到后台 请求参数:前台向后台传数据 回调函数:回调函数就是一个自定义的函数在发生特定的事件的时候调用来处理这个事件 ...

  3. Java生成excel导出文件(使用poi+JXL)

    1.使用poi生成文件 package com.mi.entity; import java.util.Date; public class Student { private int id; pri ...

  4. 机器学习(Machine Learning)&深入学习(Deep Learning)资料

    <Brief History of Machine Learning> 介绍:这是一篇介绍机器学习历史的文章,介绍很全面,从感知机.神经网络.决策树.SVM.Adaboost 到随机森林. ...

  5. IE已经被抛弃,但是不能遗忘

    虽然IE的兼容问题,在我写这篇文章的时候基本已经被抛弃了,但是我觉得还是应该了解一下最基本的解决办法. 就像中国的历史已经过去,但是我们不能忘记一样的. 逐个版本解决法 .bb{ background ...

  6. 转:MyEclipse8.6插件安装方法

    通常,我们可以用update来直接安装.但是myeclipse限制了中国区的下载和更新.所以我们只能用插件配置的方法来实现. MyEclipse8.6插件安装同Eclipse插件安装方式大致相同,如下 ...

  7. Openstack的vnc界面定制

    先来看一下青云的vnc界面: 在来看一下openstack的自带的vnc界面: 区别于感受 本身原理是一样的,但是vnc上面的html布局不一样而已,但是青云的vnc界面给人的感受是:清晰提示,信息给 ...

  8. 查找(顺序表&有序表)

    [1]查找概论 查找表是由同一类型是数据元素(或记录)构成的集合. 关键字是数据元素中某个数据项的值,又称为键值. 若此关键字可以唯一标识一个记录,则称此关键字为主关键字. 查找就是根据给定的某个值, ...

  9. scrapy学习记录

    scrapy是一个用来爬取一个或多个网站的数据,提取数据的应用框架.下载过程非常复杂,而且会遇到各种问题.所以写个博客来记录下. 安装好python2.7之后,就可以开始.安装scrapy前还需要安装 ...

  10. linux配置java环境变量(详细)【转】

    转自:http://www.cnblogs.com/samcn/archive/2011/03/16/1986248.html 一. 解压安装jdk 在shell终端下进入jdk-6u14-linux ...