【Python】 文件和操作文件方法
文件
■ 基本的文件用法
f = open("path","mode") mode有a,w,r,b,+等。默认为r。模式与打开文件时的动作有关系,比如用w打开的话肯定会清空文件再写,而a的话打开时就不会清空文件而是直接append内容
关于文件的打开模式,我有一句mmp一定要讲。。众所周知,在windows中换行符是\r\n,在unix中换行符是\n,而python做了一个事就是在一般的写模式下写文件的时候,自动根据当前的操作系统类型进行换行符的转换。这么一来有时候想要在windows下写完文件再传送到unix系统中就导致了这个文件再unix中不可直接调用。解决的方法就是把open("file","w")换成open("file","wb+"),加上b之后python就不知道写的文件是文本文件还是什么就不会轻易地做换行符的转换了。
f.read()/write(...)
f.close()
在很多示例中,打开文件用的都是这样一种方法:
with open("path","mode") as f:
f.操作
不用再手动关闭文件什么的,这个涉及到with这个上下文管理语句,现在还不是很懂,等以后有机会再来研究一下。
■ 读的方法
f.read(...) 读...个字符,无参数则读取整个文件
f.readline() 读取一行,如果有参数就是读取这行的前n个字符,每行包括换行符在内!
f.readlines() 读取一个由行组成的列表,每行也都有换行符
*因为程序是以流的形式读取文件的,所以在readline,read这种一点一点读取的方法里,读取完一部分后再读取就自动接续到下一部分了。
f.seek(offset[,whence]) seek方法指定文件读取指针位置。whence参数可选0,1或2分别代表文件开头,指针当前位置和文件结尾。offset设置一个数,可正可负,表示从whence设置的位置向前或向后偏移多少个字节开始读取文件内容。whence默认是0。因为可以重设指针位置,seek方法常用于文件流读取到一定程度后回过头再去读取或者跳过一部分内容读取、直接读取文件末尾部分等场景。比如f.seek(-128,2)的意思就是将文件读取指针设置到文件末尾前的128个字节处,之后再f.read()就可以直接读到文件最后128个字节的内容了。
■ 写的方法
f.write(...)
f.writelines([..,..,..]) 与readlines相反,用write将一个列表写进文件,注意的是writelines不会再每个元素后面自动加上换行回车,所以要手动地加上\n
■ 三个特别的类文件对象
stdin, stdout, stderr是sys的三个类文件对象,所谓类文件,就是说它们可以像一个文件一样去read和write,比如:
sys.stdin.readlines()
sys.stdout.write(...)
sys.stderr.write(...)
■ 对文件内容的遍历
● 按字节处理
用read(1)对字符做一个遍历,循环的条件可以是while char != ""来判断是不是把文件读完了
● 按行处理
用readline()对行做遍历,循环的条件可以是while line != ""。
需要注意的是readline每次只读一行,肯定效率比readlines要低一点,但是碰到很大的文件,没办法用readlines一次性读进内存的话,可以考虑用readline来遍历
● 更简便的写法
python中的文件是个可迭代的对象。这意味着我们也可以这么写:
for line in test_file:
process(line)
也就是说如果默认按照行来处理的话,甚至都可以不用写open来打开语句
■ 文件对象的flush方法
写入文件时,并不是调用一次write方法就马上写入的。可以试试看:
for i in range(5):
sys.stdout.write("hello\n")
time.sleep(1)
会发现,这段代码要等5秒后才会把5行hello一起输出。这是因为调用write方法的时候先把待写入内容放入了缓存中。如果想要一秒就看到一条输出的话可以在sleep前面加上一个sys.stdout.flush()来清空缓存并写入内容。
说到这个顺便说一下,文件对象也会有很多自带的属性。flush是一个,其他还有一些比如
file.closed 返回布尔值,判断文件是否被关闭了
file.mode 返回文件被打开的方式
file.name 返回文件名
file.softspace 返回一个布尔值,如果是False就意味着文件在用print语句(或函数)进行输出的时候末尾会带一个空格符,一般不太用这个属性
■ 写入文件时的编码
在写入文件时,如果源数据是unicode格式的,那么在写入时python会自动用一个编码格式来把unicode编码再写入。然而这个编码格式往往就是ascii,这就导致了会有UnicodeEncodeError,为了解决这个问题,一个很好的办法就是在open文件的时候指定好编码。
网上有不少说builtin的open函数是带有encoding这个参数的,然而我试了下发现并不行。可以的方法是import codecs之后用codecs.open,这个方法的第三个参数是编码格式,就可以指定了。
【Python】 文件和操作文件方法的更多相关文章
- 007PHP文件处理—— 判断文件与操作文件fopen fread fclose is_executable is_readable is_writeable
<?php /** * 判断文件与操作文件fopen fread fclose * is_executable is_readable is_writeable */ //判断一个文件是不是一个 ...
- python基础知识---操作文件
一.打开文件 open()函数 open函数返回一个文件对象. 用法:open('文件名','模式') 打开文件的模式有: r,只读模式(默认). w,只写模式.[不可读:不存在则创建:存在则删除内 ...
- python,os操作文件,文件路径(上一级目录)
python获取文件上一级目录:取文件所在目录的上一级目录 os.path.abspath(os.path.join(os.path.dirname('settings.py'),os.path.pa ...
- php 应用 bootstrap-fileinput 上传文件 插件 操作的方法
//先加载插件所需要的 js .css 文件 <link href="css/fileinput.css" rel="stylesheet" type=& ...
- python学习笔记 操作文件和目录
如果我们要操作文件.目录,可以在命令行下面输入操作系统提供的各种命令来完成.比如dir.cp等命令. 如果要在Python程序中执行这些目录和文件的操作怎么办?其实操作系统提供的命令只是简单地调用了操 ...
- AIR文件操作:使用文件对象操作文件和目录 .
来源:http://blog.csdn.net/zdingxin/article/details/6635376 在AIR中可以方便的对本地文件操作,不过上次做了个项目,发现还是有不少不方便的地方,比 ...
- AIR使用文件对象操作文件和目录
文件对象是啥?文件对象(File对象)是在文件系统中指向文件或目录的指针.由于安全原因,只在AIR中可用. 文件对象能做啥? 获取特定目录,包括用户目录.用户文档目录.该应用程序启动的目录和程序目录 ...
- AIR文件操作(二):使用文件对象操作文件和目录
转载于:http://www.flashj.cn/wp/air-file-operation2.html 文件对象是啥?文件对象(File对象)是在文件系统中指向文件或目录的指针.由于安全原因,只在A ...
- PHP文件处理--操作文件
除了能够对文件内容进行读写,对文件本身相同也能够进行操作,如拷贝文件.又一次命名.查看改动日期等. PHP内置了大量的文件操作函数,经常使用的文件函数例如以下表: 函数原型 函数说明 举例 bool ...
随机推荐
- HeapAlloc,GlobalAlloc,LocalAlloc,VirtualAlloc,malloc,new的异同
1. 首先我们来看HeapAlloc: MSDN上的解释为:HeapALloc是从堆上分配一块内存,且分配的内存是不可移动的(即如果没有连续的空间能满足分配的大小,程序不能将其他零散的 空间利用起来, ...
- 安装coreseek cannot find input file: src/Makefile.in 错误解决方法
安装coreseek 出现了cannot find input file: src/Makefile.in 解决方法如下 >autoheader >automake --add-missi ...
- R语言︱排序问题
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 数据排序 1.sort(),rank(),or ...
- linux下驱动模块化编译,动态加载以及卸载
步骤:: 1.编写first_driver_hello.c文件,将其放在/linux2.6.32/drivers/char路径下: 2.在/linux2.6.32/drivers/cha/Kconfi ...
- 错误代码: 1054 Unknown column 'course' in 'field list'
1.错误描述 1 queries executed, 0 success, 1 errors, 0 warnings 查询:SELECT stu_name, course, score FROM t_ ...
- jquery自带的方法
5.1,$.trim $.trim(" Hello, chinaren_1123 & 摆渡浮桥! "); //去掉前后空格后->Hello, chinaren ...
- WPF基础篇之命名空间
WPF中XAML与C#一样,也有自己独立的编译器.XAML会被解析和编译,最终形成微软的中间语言存储在程序集中.在解析和编译XAML的语言过程中,我们经常需要告诉编译器一些重要的信息,比如XAML代码 ...
- 移动端的silder,未封装,基于zepto的touch模块,有参照修改过touch的bug
<!--html模块--> <header class="appoin-head"> <ul> <li class="aa&qu ...
- 【BZOJ2440】完全平方数(二分答案,莫比乌斯反演)
[BZOJ2440]完全平方数(二分答案,莫比乌斯反演) 题面 BZOJ 题解 很显然,二分一个答案 考虑如何求小于等于这个数的非完全平方数倍数的个数 这个明显可以直接,莫比乌斯反演一下 然后这题就很 ...
- java 动态代理 , 多看看。 多用用。
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Proxy; import java.lang.reflect ...