python 学习笔记 5 -- 文件输入输出
本文主要介绍python下的文件输入输出操作,python的文件操作简单易用~通过本文相信你可以熟练掌握file和pickle这两种输入输出操作!
1.文件
你可以通过创建一个file类的对象来打开一个文件,分别使用file类的read、readline或write方法来恰当地读写文件。对文件的读写能力依赖于你在打开文件时指定的模式。
eg.
文件打开:
f = file('poem.txt', 'w') # 指明文件和模式来创建一个file类的实例。模式可以为读模式('r')、写模式('w')或追加模式('a')。
用的文件打开方式:
f = open('poem.txt', 'w') # open方法是用来打开磁盘上的文件。open返回一个文件对象(与上句file创建实例类似),它拥有一些方法和属性,可以得到被打开文件的信息以及对该文件进行操作。
# 此外,open方法可以接收三个参数:文件名、模式和缓冲区参数。只有第一个参数(文件名)是必需的;其他两个时可选的。如果没有指定,文件以文本方式打开。更多关于文件的学习可以使用命令:” pydoc file ”查看、学习
文件写:
f = file('poem.txt', 'w') # 指明文件和模式来创建一个file类的实例。模式可以为读模式('r')、写模式('w')或追加模式('a')。
e(poem) # 写文件
f.close() # 关闭文件描述符
文件读:
f = file('poem.txt') # 打开文件不指定模式则为默认模式'r'
while True:
line = f.readline() # 读文件中的一行,读取一行后,下一次在使用readline就会读下一行,以此类推直到文件结束(EOF)。我们也可以直接使用read()读取整个文件
if len(line) == 0: # 读取的行长度为0指的是读到了EOF
break
print line, # 使用逗号为了阻止打印后自动换行
f.close()
注: 使用readline()时,python会扫描每一个字节,知道\n,然后它会停止读取文件并返回此前的文件内容。而 f 则会记录每次调用readline()后的读取位置,这样下一次他就可以在被调用时读取下一行数据。那么这样一直读到文件结尾后我们再想使用readline读取文件该怎么办? 答案是~~使用file的seek将记录的位置挪到文件开始处!
eg.
f = file('poem.txt') # 打开文件不指定模式则为默认模式'r'
while True:
line = f.readline() # 读文件中的一行,读取一行后,下一次在使用readline就会读下一行,以此类推直到文件结束>(EOF)。
if len(line) == 0: # 读取的行长度为0指的是读到了EOF
break
print line, # 使用逗号为了阻止打印后自动换行
f.seek(0) # 使用seek(0)将当前位置跳转到文件开始处
# 文件的seek方法在被打开文件中移动到另一个位置。
# 第二个参数指出第一个参数是什么意思: 0 表示移动到一个绝对位置(从文件起始处算起);1 表示移动到一个相
置算起);2表示相对于文件尾的位置,所以seek(-128,2)表示跳到从文件尾算第128个字节的位置。
f.tell() # 文件的tell方法可以告诉你当前打开文件的当前位置。
# 因为刚seek(0)跳转到文件开始处,所以tell()会返回0,表示当前位置在文件开始处
print f.readline() # 仍然打印的第一行哦!
f.close()
f = file('poem.txt', 'w') # 擦除文件需要用写模式('w')打开文件
f.truncate(poem) # 擦除文件,小心使用!
f.close() # 关闭文件描述符
文件擦除:
[python] view plaincopy
f = file('poem.txt', 'w') # 擦除文件需要用写模式('w')打开文件
f.truncate(poem) # 擦除文件,小心使用!
f.close() # 关闭文件描述符
文件关闭:
f.close() 上面示例中已多次用到此函数关闭文件
f.closed 文件对象的closed属性是用来表示对象是打开还是关闭的,调用 f.closed返回True则表示已关闭,返回False则表示还未关闭!
下面是我写的一个对当前所学的很多python知识的一个大综合的脚本,看看你是否已经能够理解?
#!/usr/bin/python
# -*- coding: utf-8 -*-
# 本脚本主要用于介绍文件读写,其中也使用了很多之前介绍到的python特性
from os.path import exists # 使用import从os.path模块中加载exists,关于import会在后续的博客中介绍,这里就理解成头文件,加载了exists后我们才可以使用它!
from sys import argv # 前面介绍过,接收脚本的参数需要使用argv
script , from_file, to_file = argv
print "coping from %s to %s" %(from_file,to_file) # 打印出来我们这次所要做的工作
in_file=open(from_file) # 打开from_file文件,将open的返回值赋给in_file。注意,open文件时没有带模式所以使用默认读模式
data = in_file.read() # 读文件内容到data
print "The input file is %s bytes long" % len(data)
print "Does the outfile exist?\n\t %s " % exists(to_file) # 脚本开始时import的exists函数(用来检测文件是否存在,存在返回True)
raw_input("Ready ,Hit RETURN to continue,Ctrl-C to abort")
out_file = open(to_file,'w') # 使用写模式打开to_file
out_file.write(data) # 使用file的write函数将数据写到目的文件中
print 'Alright ,all done'
in_file.close() # 记得关闭已使用的文件
out_file.close()
out_file = open(to_file) # 以读模式打开to_file,为什么要先关闭再打开呢?:-),你自己试试?
print " The %s file is now:" % to_file
print out_file.read()
out_file.close() # 再关闭读模式
# 下面我们测试擦除文件,擦除需要写模式
out_file = open(to_file,'w')
raw_input("Do you want to erase the copy file ,Hit RETURN to continue,Ctrl-C to abort")
out_file.truncate() # 使用file的truncate()对文件进行擦除操作
# 再写几串字符串到文件中
print "Now I'm going to ask you for three lines:"
line1 = raw_input("Line 1: >") # 对raw_input还熟悉不?它主要用来接受用户输入,而它带的参数可以打印到屏幕上作为提示!
line2 = raw_input("Line 2: >") # raw_input 是不是很好用?
line3 = raw_input("Line 3: >")
print "Now I'm going to write these three lines to the %r file" % to_file
out_file.write(line1+"\n"+line2+"\n"+line3+"\n") # 直接使用+链接几个字符串并写入文件!
print "write done "
out_file.close()
out_file = open(to_file) # 再打开读一下看看此时的to_file文件内容!
print " The %s file is now:" % to_file
print out_file.read()
out_file.close()
运行起来是这样的!这里的poem.txt是我早已准备好的文件!
# python file_test.py poem.txt /tmp/poem
coping from poem.txt to /tmp/poem
The input file is 104 bytes long
Does the outfile exist?
False
Ready ,Hit RETURN to continue,Ctrl-C to abort
Alright ,all done
The /tmp/poem file is now:
This is the python poem
using for txt read
do you like me?
whatever
I like myself
I'm selfconfidence
Do you want to erase the copy file ,Hit RETURN to continue,Ctrl-C to abort
Now I'm going to ask you for three lines:
Line 1: >the first line I write
Line 2: >second line to read
Line 3: >what ? the third line ?
Now I'm going to write these three lines to the '/tmp/poem' file
write done
The /tmp/poem file is now:
the first line I write
second line to read
what ? the third line ?
2.储存器
Python提供一个标准的模块,称为pickle。使用pickle你可以在一个文件中储存任何Python对象,之后你又可以把它完整无缺地取出来。这被称为 持久地 储存对象。(还有另一个模块称为cPickle,它的功能和pickle模块完全相同,只不过它是用C语言编写的,因此要快得多(比pickle快1000倍)。你可以使用它们中的任一个,而我们在这里将使用cPickle模块。记住,我们把这两个模块都简称为pickle模块。)
eg.
#!/usr/bin/python
# -*- coding: utf-8 -*-
import cPickle as p # import..as语法是一种便利方法,以便于我们可以使用更短的模块名称。在程序的其余部>分的时候,我们简单地把这个模块称为p。
shoplist = ['apple', 'mango'] # 一个列表,用来作为演示存储
shoplistfile = 'shoplist.data' # 指定一个文件名
f = file(shoplistfile, 'w') # 使用写模式打开
p.dump(shoplist, f) # 将列表中的信息dump到文件中,调用pickle模块的dump函数,把对象储存到打开的文件中。这个过程称为 储存 。
f.close() # 关闭文件
print "Dump success ,Now I will read the data in the file"
f = file(shoplistfile) # 读模式打开文件
data = p.load(f) # 使用pickle模块的load函数的返回来取回对象。这个过程称为 取储存
print data # 打印取存储信息
其实它和文件读写也比较相像,下面是运行的状况:
long@zhouyl:/tmp$ python pickle.py
Dump success ,Now I will read the data in the file
['apple', 'mango']
long@zhouyl:/tmp$ cat shoplist.data
(lp1
S'apple'
p2
aS'mango'
p3
所以我们可以看到,使用pickle存储到文件中的和直接写入到文件中的内容时不一样的,所以千万不要两种方法混合使用(使用pickle.dump存储的内容一定要使用load取出,不要使用file.read())!否则就会出现如下状况:
Now I will read the data in the file with file.read()
(lp1
S'apple'
p2
aS'mango'
p3
a.
对于文件读写,需要考虑文件打开、读写错误等问题,需要添加异常处理部分(请将下篇)。
转载于:https://blog.51cto.com/marsggg/1429459
python 学习笔记 5 -- 文件输入输出相关推荐
- Python学习笔记:文件(File)
Python学习笔记:文件(File) 打开一个文件用于读写,在Python里十分简单,利用内置open函数,可以用绝对路径,也可以用相对路径. 默认模式是'r',只读模式. 文件句柄f是一个可迭代对 ...
- Python学习笔记--exe文件打包与UI界面设计
exe文件打包与UI界面设计 前言 一.基于tkinter实现的UI设计 1.1 库的选择及思路 1.2 定位方法的选用 1.3 Frame控件 1.4 变量设置 1.5 批量设置 1.6 Text文 ...
- Python学习笔记之文件
一.从文件中读取数据:有时候,往往会把相关的信息生成一个文件存储在里面,如果要使用文本文件中的信息,首先需要将信息读取到内存中.为此,你可以一次性读取文件的全部内容,也可以以每次一行的方式逐步读取. ...
- python 学习笔记(基础输入输出,字符串,循环,三种数组)
学习python发现这门语言和其他语言有很多不同之处,比如python的变量不需要要声明类型,python是解释性语言所以要注意函数定义的位置,python注重代码格式而不注重符号.python方便得 ...
- python学习笔记-36 文件读写
读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘, ...
- Python学习笔记9—文件
在Python中,要对一个文件进行操作,只需用内置的open函数打开文件即可. Signature: open(file, mode='r', buffering=-1, encoding=No ...
- Python学习笔记:文件读/写方法汇总
# ############# 文件操作方法# 重点常用方法标红# ############import time, sys # ########### 读文件 ################### ...
- python学习笔记十-文件操作
对文件操作流程 1.打开文件,得到文件句柄并赋值给一个变量 2.通过句柄对文件进行操作 3.关闭文件 操作如下: 花间一壶酒,独酌无相亲. 举杯邀明月,对影成三人. 月既不解饮,影徒随我身. 暂伴月将 ...
- Lawliet|Python学习笔记4——文件处理
1.文件的使用 a.文件的类型 文件是数据的抽象和集合 文件是存储在辅助存储器上的数据序列 文件是数据存储的一种形式 文件展现形态:文本文件和二进制文件 文本文件:由单一特定编码组成的文件,如:UTF ...
最新文章
- Ubuntu 16.04 LTS下编译GPU版tensorflow
- Windows Server 2008之三设置TCP/IP
- 年方二八,人生的路口之上
- 使用正则表达式解析http请求url中的参数和参数值
- nx二次开发c语言,NX二次开发-UFUN API函数编程基础
- AI算法连载20:统计之隐马尔可夫模型
- php文件访问不到数据,PHP 5.x同步文件访问(无数据库)
- python范围运算符_Python的海象运算符
- CodeForces - 1610B Kalindrome Array
- POJ 1887 (DP)
- Hadoop只输出Key不输出Value的小技巧
- 《Total Commander:万能文件管理器》——第7.2节.比较和同步文件夹
- shfileoperation C#无法读源文件或磁盘XP系统1026错误
- elasticserach(一)
- mysql存储过程(通俗易懂)
- Windows下wafw00f的安装
- 食物链(种类并查集)
- 介质访问控制MAC以及ALOHA协议
- 专题三:羊毛党络绎不绝,电商行业防不胜防
- 数据可视化-设计原则
热门文章
- spoj Find Log
- 网络编程学习笔记(gethostbyname函数)
- Sql语句在线转java bean https://www.bejson.com/othertools/sql2pojo/
- Java新手问题 02 面向对象基本功
- POJ 1523 SPF 割点与桥的推断算法-Tarjan
- 2010 求后序遍历
- 简单排列习题2.5 的 2 - 6 P35
- 5月3日 条件语句、循环语句的复习练习
- Android核心分析之二十三Andoird GDI之基本原理及其总体框架
- 浅析Android中的消息机制