【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 ...
随机推荐
- 理解Android DecorView
一.DecorView为整个Window界面的最顶层View. 二.DecorView只有一个子元素为LinearLayout.代表整个Window界面,包含通知栏,标题栏,内容显示栏三块区域. 三. ...
- 深入理解StrongReference,SoftReference, WeakReference和PhantomReference
Java 中一共有 4 种类型的引用 : StrongReference. SoftReference. WeakReference 以及 PhantomReference (传说中的幽灵引用 呵呵) ...
- 阿里巴巴开源前端框架--Weex实践
Weex是最近很火很NB的一个技术产品,因为本篇介绍的是怎样使用Weex的最佳实践,所以就不罗里吧嗦的夸它怎么怎么好了,感兴趣的可以访问Weex HomePage,或加入旺旺群:1330170019. ...
- Ubuntu12.04LTS安装好后是空白桌面的解决步骤(更新显卡驱动)
安装完毕启动后,明显慢的要死,登陆后竟然是一个空白的桌面环境,Ctrl+Alt+T 根本没有任何反应.唯一的反应就是右键能够创建文件和文档. 同时打开的窗口没有最大化,最小化及关闭按钮. GOOGLE ...
- WINDOWS的错误代码对应的故障
WINDOWS的错误代码对应的故障 0000 操作已成功完成. 0001 错误的函数. 0002 系统找不到指定的文件. 0003 系统找不到指定的路径. 0004 系统无法打开文件. 0005 拒绝 ...
- (二十三)mongodb中group的问题
今天的工作中我需要从mongodb数据库中查出一定的数据,并排序后返回给前台,数据库表中包含了ruleID,processingID,userID,updateTime等字段. 同一个ruleI ...
- ubuntu14.04 64位 安装eclipse出错
1 错误描述 org.eclipse.m2e.logback.configuration: The org.eclipse.m2e.logback.configuration bundle was a ...
- python爬虫--爬取某网站电影下载地址
前言:因为自己还是python世界的一名小学生,还有很多路要走,所以本文以目的为向导,达到目的即可,对于那些我自己都没弄懂的原理,不做去做过多解释,以免误人子弟,大家可以网上搜索. 友情提示:本代码用 ...
- cookie的初步认识
一.会话的概念 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学曾 ...
- NOIP2017+停课总结
注意 此文章禁止一切含虚伪内容的评论,违者删除评论 其删除解释权归博主所有 Part1 论yyb NOIP 如何炸裂 前言 离NOIP已有三个星期,忘却的救主快要降临了吧,我正有写一篇总结的必要了.. ...