本文主要介绍python下的文件输入输出操作,python的文件操作简单易用~通过本文相信你可以熟练掌握file和pickle这两种输入输出操作!

1.文件

你可以通过创建一个file类的对象来打开一个文件,分别使用file类的read、readline或write方法来恰当地读写文件。对文件的读写能力依赖于你在打开文件时指定的模式。

eg.

文件打开:

  1. f = file('poem.txt', 'w')         # 指明文件和模式来创建一个file类的实例。模式可以为读模式('r')、写模式('w')或追加模式('a')。

  2. 用的文件打开方式:

  3. f = open('poem.txt', 'w')         # open方法是用来打开磁盘上的文件。open返回一个文件对象(与上句file创建实例类似),它拥有一些方法和属性,可以得到被打开文件的信息以及对该文件进行操作。

  4. # 此外,open方法可以接收三个参数:文件名、模式和缓冲区参数。只有第一个参数(文件名)是必需的;其他两个时可选的。如果没有指定,文件以文本方式打开。更多关于文件的学习可以使用命令:” pydoc file ”查看、学习

文件写:

  1. f = file('poem.txt', 'w')         # 指明文件和模式来创建一个file类的实例。模式可以为读模式('r')、写模式('w')或追加模式('a')。

  2. e(poem) # 写文件

  3. f.close() # 关闭文件描述符

文件读:

  1. f = file('poem.txt') # 打开文件不指定模式则为默认模式'r'

  2. while True:

  3. line = f.readline() # 读文件中的一行,读取一行后,下一次在使用readline就会读下一行,以此类推直到文件结束(EOF)。我们也可以直接使用read()读取整个文件

  4. if len(line) == 0: # 读取的行长度为0指的是读到了EOF

  5. break

  6. print line, # 使用逗号为了阻止打印后自动换行

  7. f.close()

注: 使用readline()时,python会扫描每一个字节,知道\n,然后它会停止读取文件并返回此前的文件内容。而 f 则会记录每次调用readline()后的读取位置,这样下一次他就可以在被调用时读取下一行数据。那么这样一直读到文件结尾后我们再想使用readline读取文件该怎么办? 答案是~~使用file的seek将记录的位置挪到文件开始处!

eg.

  1. f = file('poem.txt')                # 打开文件不指定模式则为默认模式'r'

  2. while True:

  3. line = f.readline()            # 读文件中的一行,读取一行后,下一次在使用readline就会读下一行,以此类推直到文件结束>(EOF)。

  4. if len(line) == 0:              # 读取的行长度为0指的是读到了EOF

  5. break

  6. print line,                       # 使用逗号为了阻止打印后自动换行

  7. f.seek(0)       # 使用seek(0)将当前位置跳转到文件开始处

  8. # 文件的seek方法在被打开文件中移动到另一个位置。

  9. # 第二个参数指出第一个参数是什么意思: 0 表示移动到一个绝对位置(从文件起始处算起);1  表示移动到一个相

  10. 置算起);2表示相对于文件尾的位置,所以seek(-128,2)表示跳到从文件尾算第128个字节的位置。

  11. f.tell()        # 文件的tell方法可以告诉你当前打开文件的当前位置。

  12. # 因为刚seek(0)跳转到文件开始处,所以tell()会返回0,表示当前位置在文件开始处

  13. print f.readline()                 # 仍然打印的第一行哦!

  14. f.close()

  15. f = file('poem.txt', 'w') # 擦除文件需要用写模式('w')打开文件

  16. f.truncate(poem) # 擦除文件,小心使用!

  17. f.close() # 关闭文件描述符

文件擦除:

[python] view plaincopy

  1. f = file('poem.txt', 'w') # 擦除文件需要用写模式('w')打开文件

  2. f.truncate(poem) # 擦除文件,小心使用!

  3. f.close() # 关闭文件描述符

文件关闭:

  1. f.close() 上面示例中已多次用到此函数关闭文件

  2. f.closed 文件对象的closed属性是用来表示对象是打开还是关闭的,调用 f.closed返回True则表示已关闭,返回False则表示还未关闭!

下面是我写的一个对当前所学的很多python知识的一个大综合的脚本,看看你是否已经能够理解?

  1. #!/usr/bin/python

  2. # -*- coding: utf-8 -*-

  3. # 本脚本主要用于介绍文件读写,其中也使用了很多之前介绍到的python特性

  4. from os.path import exists          # 使用import从os.path模块中加载exists,关于import会在后续的博客中介绍,这里就理解成头文件,加载了exists后我们才可以使用它!

  5. from sys import argv                # 前面介绍过,接收脚本的参数需要使用argv

  6. script ,  from_file, to_file = argv

  7. print "coping from %s to %s" %(from_file,to_file)   # 打印出来我们这次所要做的工作

  8. in_file=open(from_file)             # 打开from_file文件,将open的返回值赋给in_file。注意,open文件时没有带模式所以使用默认读模式

  9. data = in_file.read()               # 读文件内容到data

  10. print "The input file is %s bytes long" % len(data)

  11. print "Does the outfile exist?\n\t %s " % exists(to_file)   # 脚本开始时import的exists函数(用来检测文件是否存在,存在返回True)

  12. raw_input("Ready ,Hit RETURN to continue,Ctrl-C to abort")

  13. out_file = open(to_file,'w')        # 使用写模式打开to_file

  14. out_file.write(data)                # 使用file的write函数将数据写到目的文件中

  15. print 'Alright ,all done'

  16. in_file.close()                     # 记得关闭已使用的文件

  17. out_file.close()

  18. out_file = open(to_file)            # 以读模式打开to_file,为什么要先关闭再打开呢?:-),你自己试试?

  19. print " The %s file is now:" % to_file

  20. print out_file.read()

  21. out_file.close()                    # 再关闭读模式

  22. # 下面我们测试擦除文件,擦除需要写模式

  23. out_file = open(to_file,'w')

  24. raw_input("Do you want to erase the copy file ,Hit RETURN to continue,Ctrl-C to abort")

  25. out_file.truncate()                 # 使用file的truncate()对文件进行擦除操作

  26. # 再写几串字符串到文件中

  27. print "Now I'm going to ask you for three lines:"

  28. line1 = raw_input("Line 1: >")       # 对raw_input还熟悉不?它主要用来接受用户输入,而它带的参数可以打印到屏幕上作为提示!

  29. line2 = raw_input("Line 2: >")       # raw_input 是不是很好用?

  30. line3 = raw_input("Line 3: >")

  31. print "Now I'm going to write these three lines to the %r file" % to_file

  32. out_file.write(line1+"\n"+line2+"\n"+line3+"\n")    # 直接使用+链接几个字符串并写入文件!

  33. print "write done "

  34. out_file.close()

  35. out_file = open(to_file)            # 再打开读一下看看此时的to_file文件内容!

  36. print " The %s file is now:" % to_file

  37. print out_file.read()

  38. out_file.close()

运行起来是这样的!这里的poem.txt是我早已准备好的文件!

  1. # python file_test.py poem.txt /tmp/poem

  2. coping from poem.txt to /tmp/poem

  3. The input file is 104 bytes long

  4. Does the outfile exist?

  5. False

  6. Ready ,Hit RETURN to continue,Ctrl-C to abort

  7. Alright ,all done

  8. The /tmp/poem file is now:

  9. This is the python poem

  10. using for txt read

  11. do you like me?

  12. whatever

  13. I like myself

  14. I'm selfconfidence

  15. Do you want to erase the copy file ,Hit RETURN to continue,Ctrl-C to abort

  16. Now I'm going to ask you for three lines:

  17. Line 1: >the first line I write

  18. Line 2: >second line to read

  19. Line 3: >what ? the third line ?

  20. Now I'm going to write these three lines to the '/tmp/poem' file

  21. write done

  22. The /tmp/poem file is now:

  23. the first line I write

  24. second line to read

  25. what ? the third line ?

2.储存器

Python提供一个标准的模块,称为pickle。使用pickle你可以在一个文件中储存任何Python对象,之后你又可以把它完整无缺地取出来。这被称为 持久地 储存对象。(还有另一个模块称为cPickle,它的功能和pickle模块完全相同,只不过它是用C语言编写的,因此要快得多(比pickle快1000倍)。你可以使用它们中的任一个,而我们在这里将使用cPickle模块。记住,我们把这两个模块都简称为pickle模块。)

eg.

  1. #!/usr/bin/python

  2. # -*- coding: utf-8 -*-

  3. import cPickle as p     # import..as语法是一种便利方法,以便于我们可以使用更短的模块名称。在程序的其余部>分的时候,我们简单地把这个模块称为p。

  4. shoplist = ['apple', 'mango']   # 一个列表,用来作为演示存储

  5. shoplistfile = 'shoplist.data'  # 指定一个文件名

  6. f = file(shoplistfile, 'w')     # 使用写模式打开

  7. p.dump(shoplist, f)             # 将列表中的信息dump到文件中,调用pickle模块的dump函数,把对象储存到打开的文件中。这个过程称为 储存 。

  8. f.close()                       # 关闭文件

  9. print "Dump success ,Now I will read the data in the file"

  10. f = file(shoplistfile)          # 读模式打开文件

  11. data = p.load(f)                # 使用pickle模块的load函数的返回来取回对象。这个过程称为 取储存

  12. print data                      # 打印取存储信息

其实它和文件读写也比较相像,下面是运行的状况:

  1. long@zhouyl:/tmp$ python pickle.py

  2. Dump success ,Now I will read the data in the file

  3. ['apple', 'mango']

  4. long@zhouyl:/tmp$ cat shoplist.data

  5. (lp1

  6. S'apple'

  7. p2

  8. aS'mango'

  9. p3

所以我们可以看到,使用pickle存储到文件中的和直接写入到文件中的内容时不一样的,所以千万不要两种方法混合使用(使用pickle.dump存储的内容一定要使用load取出,不要使用file.read())!否则就会出现如下状况:

  1. Now I will read the data in the file with file.read()

  2. (lp1

  3. S'apple'

  4. p2

  5. aS'mango'

  6. p3

  7. a.

对于文件读写,需要考虑文件打开、读写错误等问题,需要添加异常处理部分(请将下篇)。

转载于:https://blog.51cto.com/marsggg/1429459

python 学习笔记 5 -- 文件输入输出相关推荐

  1. Python学习笔记:文件(File)

    Python学习笔记:文件(File) 打开一个文件用于读写,在Python里十分简单,利用内置open函数,可以用绝对路径,也可以用相对路径. 默认模式是'r',只读模式. 文件句柄f是一个可迭代对 ...

  2. Python学习笔记--exe文件打包与UI界面设计

    exe文件打包与UI界面设计 前言 一.基于tkinter实现的UI设计 1.1 库的选择及思路 1.2 定位方法的选用 1.3 Frame控件 1.4 变量设置 1.5 批量设置 1.6 Text文 ...

  3. Python学习笔记之文件

    一.从文件中读取数据:有时候,往往会把相关的信息生成一个文件存储在里面,如果要使用文本文件中的信息,首先需要将信息读取到内存中.为此,你可以一次性读取文件的全部内容,也可以以每次一行的方式逐步读取. ...

  4. python 学习笔记(基础输入输出,字符串,循环,三种数组)

    学习python发现这门语言和其他语言有很多不同之处,比如python的变量不需要要声明类型,python是解释性语言所以要注意函数定义的位置,python注重代码格式而不注重符号.python方便得 ...

  5. python学习笔记-36 文件读写

    读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘, ...

  6. Python学习笔记9—文件

       在Python中,要对一个文件进行操作,只需用内置的open函数打开文件即可. Signature: open(file, mode='r', buffering=-1, encoding=No ...

  7. Python学习笔记:文件读/写方法汇总

    # ############# 文件操作方法# 重点常用方法标红# ############import time, sys # ########### 读文件 ################### ...

  8. python学习笔记十-文件操作

    对文件操作流程 1.打开文件,得到文件句柄并赋值给一个变量 2.通过句柄对文件进行操作 3.关闭文件 操作如下: 花间一壶酒,独酌无相亲. 举杯邀明月,对影成三人. 月既不解饮,影徒随我身. 暂伴月将 ...

  9. Lawliet|Python学习笔记4——文件处理

    1.文件的使用 a.文件的类型 文件是数据的抽象和集合 文件是存储在辅助存储器上的数据序列 文件是数据存储的一种形式 文件展现形态:文本文件和二进制文件 文本文件:由单一特定编码组成的文件,如:UTF ...

最新文章

  1. Ubuntu 16.04 LTS下编译GPU版tensorflow
  2. Windows Server 2008之三设置TCP/IP
  3. 年方二八,人生的路口之上
  4. 使用正则表达式解析http请求url中的参数和参数值
  5. nx二次开发c语言,NX二次开发-UFUN API函数编程基础
  6. AI算法连载20:统计之隐马尔可夫模型
  7. php文件访问不到数据,PHP 5.x同步文件访问(无数据库)
  8. python范围运算符_Python的海象运算符
  9. CodeForces - 1610B Kalindrome Array
  10. POJ 1887 (DP)
  11. Hadoop只输出Key不输出Value的小技巧‏
  12. 《Total Commander:万能文件管理器》——第7.2节.比较和同步文件夹
  13. shfileoperation C#无法读源文件或磁盘XP系统1026错误
  14. elasticserach(一)
  15. mysql存储过程(通俗易懂)
  16. Windows下wafw00f的安装
  17. 食物链(种类并查集)
  18. 介质访问控制MAC以及ALOHA协议
  19. 专题三:羊毛党络绎不绝,电商行业防不胜防
  20. 数据可视化-设计原则

热门文章

  1. spoj Find Log
  2. 网络编程学习笔记(gethostbyname函数)
  3. Sql语句在线转java bean https://www.bejson.com/othertools/sql2pojo/
  4. Java新手问题 02 面向对象基本功
  5. POJ 1523 SPF 割点与桥的推断算法-Tarjan
  6. 2010 求后序遍历
  7. 简单排列习题2.5 的 2 - 6 P35
  8. 5月3日 条件语句、循环语句的复习练习
  9. Android核心分析之二十三Andoird GDI之基本原理及其总体框架
  10. 浅析Android中的消息机制