【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 ...
随机推荐
- canvas API总结
从简单的基本图形,到复杂炫酷的动画,通过canvas元素获取的2D图形渲染上下文CanvasRenderingContext2D,能够使用丰富的API来进行图形绘制.这篇文章将会总结在之前的canva ...
- dojo级联步骤
dojo级联步骤 1.数据请求回来后,检查数据格式是否满足下拉框的数据格式: 2.通过firebug进行调试,检查select下拉框子项结点是否取道: 3.查看API文档,保证改变store的方法是正 ...
- VMware vSphere学习整理
知识点整理 内存选择 一般来说,每个虚拟机需要的内存在1~4GB甚至更多,还要为VMware ESXi预留一部分内存 2个6核的2U服务器配置64GB内存,4个6核或8核心的4U服务器配置128GB或 ...
- Babel 安装教程
Babel是一个广泛使用的转码器,可以将ES6代码转为ES5代码,从而在现有环境执行. 这意味着,你可以现在就用 ES6 编写程序,而不用担心现有环境是否支持.下面是一个例子. // 转码前 inpu ...
- jquery的动画学习--jquery权威指南
前面的fadeIn和fadeOut还有fadeTo以及sildeToggle还有sildeUp\sildeDown还有toggle还有show.hide等都经常用,就不再手写了,需要注意的是f ...
- 凸包--Graham扫描法
一直听大佬们说:凸包.凸包.凸包 一直不会..... 然后.... 今天考试,考了一道计算几何的简单题.... 这,,,还是学一下吧.. 然后考试现场学习一下凸包算法. 先理解一下凸包是啥东西. 看看 ...
- Bzoj2946:[POI2000] 最长公共子串
题面 求多个串的最长公共子串 Sol 套路,拼在一起,二分答案+后缀数组判定 把大于答案的\(height\)分组,然后计算出一个组内是否有所有串的后缀 由于串只有\(5\)个开个桶就好了 # inc ...
- 关于html中图片上传预览的实现
本地图片预览 第一种方法 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type& ...
- 如何直接在github上预览html网页效果
http://justcoding.iteye.com/blog/2321552 2.vue 配合vue-resource调用接口,获取数据 https://www.cnblogs.com/fei ...
- openssh/openssl升级到7.4和1.0.2j 源码方式
#!/bin/bashtar -xvf openssh-7.4p1.tar.gztar -xvf openssl-1.0.2j.tar.gz 升级 openssl 到1.0.2jcd openssl- ...