【4】Python 输入输出

输入输出

一、实验介绍

1.1 实验内容

本节介绍Python的输入输出

1.2 实验知识点

  • 输入输出
  • 文件读取

1.实验说明

此实验介绍输入输出以及文件读取。

1.3 实验环境

  • python2.7
  • Xfce终端

1.4 适合人群

本课程难度为初级,适合没有编程经验的初学者。

二、开发环境

启动python

登录系统后输入python命令进入交互式操作模式

$ python

三、实验步骤

3.1 格式化输出

>>> s = 'Hello, world.'
>>> str(s)
'Hello, world.'
>>> repr(s)
"'Hello, world.'"
>>> str(1.0/7)
'0.14285714285714285'
>>> x = 10 * 3.25
>>> y = 200 * 200
>>> s = 'The value of x is ' + repr(x) + ', and y is ' + repr(y) + '...'
>>> print s
The value of x is 32.5, and y is 40000...
>>> # The repr() of a string adds string quotes and backslashes:
... hello = 'hello, world\n'
>>> hellos = repr(hello)
>>> print hellos
'hello, world\n'
>>> # The argument to repr() may be any Python object:
... repr((x, y, ('spam', 'eggs')))
"(32.5, 40000, ('spam', 'eggs'))"

3.2 文件读写

3.2.1 文件对象方法

函数 open() 返回文件对象,通常的用法需要两个参数: open(filename, mode)。

$ touch wokrfile #创建一个文件
$ python
>>> f = open('workfile', 'w')
>>> print f
<open file 'workfile', mode 'w' at 80a0960>

第一个参数是一个标识文件名的字符串。第二个参数是由有限的字母组成的字符串,描述了文件将会被如何使用。可选的 模式 有:

  • 'r' ,此选项使文件只读;
  • 'w' ,此选项使文件只写(对于同名文件,该操作使原有文件被覆盖);
  • 'a' ,此选项以追加方式打开文件;
  • 'r+' ,此选项以读写方式打开文件;

模式参数是可选的。如果没有指定,默认为 'r' 模式。 要读取文件内容,需要调用 f.read(size) ,该方法读取若干数量的数据并以字符串形式返回其内容, size 是可选的数值,指定字符串长度。

>>> f = open('workfile', 'r')
>>> f.read()
''
>>>

f.readline() 从文件中读取单独一行,字符串结尾会自动加上一个换行符( \n ),只有当文件最后一行没有以换行符结尾时,这一操作才会被忽略。这样返回值就不会有混淆,如果 f.readline() 返回一个空字符串,那就表示到达了文件末尾,如果是一个空行,就会描述为 '\n' ,一个只包含换行符的字符串。

$ echo 'This is the first line of the file.\nSecond line of the file' > workfile #添加内容
$ python
>>> f = open('workfile', 'r')
>>> f.readline()
'This is the first line of the file.\n'
>>> f.readline()
'Second line of the file\n'
>>> f.readline()
''

f.readlines() 返回一个列表,其中包含了文件中所有的数据行。如果给定了 sizehint 参数,就会读入多于一行的比特数,从中返回多行文本。这个功能通常用于高效读取大型行文件,避免了将整个文件读入内存。这种操作只返回完整的行。

>>> f = open('workfile', 'r')
>>> f.readlines()
['This is the first line of the file.\n', 'Second line of the file\n']

f.write(string) 方法将 string 的内容写入文件,并返回写入字符的长度。想要写入其他非字符串内容,首先要将它转换为字符串:

>>> f = open('workfile', 'w')
>>> f.write('This is a test\n')
>>> value = ('the answer', 42)
>>> s = str(value)
>>> f.write(s)

f.tell() 返回一个整数,代表文件对象在文件中的指针位置,该数值计量了自文件开头到指针处的比特数。

如果需要改变文件对象指针,可以使用 f.seek(offset,from_what) 。指针在该操作中从指定的引用位置移动 offset 比特,引用位置由 from_what 参数指定。 from_what 值为 0 表示自文件起始处开始,1 表示自当前文件指针位置开始,2 表示自文件末尾开始。 #from_what 可以忽略,其默认值为零,此时从文件头开始。

>>> f = open('workfile', 'rb+')
>>> f.write(b'0123456789abcdef')
>>> f.seek(5)     # Go to the 6th byte in the file
>>> f.read(1)
'5'
>>> f.seek(-3, 2) # Go to the 3rd byte before the end
>>> f.read(1)
'd'

当你使用完一个文件时,调用f.close()方法就可以关闭它并释放其占用的所有系统资源。 在调用 f.close()方法后,试图再次使用文件对象将会自动失败。

>>> f.close()
>>> f.read()
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
ValueError: I/O operation on closed file

用关键字 with 处理文件对象是个好习惯。它的先进之处在于文件用完后会自动关闭,就算发生异常也没关系。它是 try-finally 块的简写:

>>> with open('workfile', 'r') as f:
...     read_data = f.read()
>>> f.closed
True

3.2.2 pickle 模块

我们可以很容易的读写文件中的字符串。数值就要多费点儿周折,因为 read() 方法只会返回字符串,应该将其传入 int() 这样的方法中,就可以将 '123' 这样的字符串转换为对应的数值 123。不过,当你需要保存更为复杂的数据类型,例如列表、字典,类的实例,事情就会变得更复杂了。 好在用户不必非得自己编写和调试保存复杂数据类型的代码。 Python 提供了一个名为 pickle 的标准模块。这是一个令人赞叹的模块,几乎可以把任何 Python 对象 (甚至是一些 Python 代码段!)表达为字符串,这一过程称之为封装( pickling)。从字符串重新构造对象称之为拆封( unpickling )。封装状态中的对象可以存储在文件或对象中,也可以通过网络在远程的机器之间传输。 如果你有一个对象 x ,一个以写模式打开的文件对象 f ,封装对象的最简单的方法只需要一行代码:

>>> import pickle
>>> f = open('test', 'w')
>>> x = [1, 2, 3]
>>> pickle.dump(x, f)
>>> f.close()

如果 f 是一个以读模式打开的文件对象,就可以重装拆封这个对象:

>>> f = open('test', 'r')
>>> x = pickle.load(f)
>>> x
[1, 2, 3]

pickle 是存储 Python 对象以供其它程序或其本身以后调用的标准方法。提供这一组技术的是一个 持久化 对象( persistent object )。因为 pickle 的用途很广泛,很多 Python 扩展的作者都非常注意类似矩阵这样的新数据类型是否适合封装和拆封。

四、总结

本节Python的格式化输出文件操作,open()可以打开一个文件,read()、readline()和readlines()可以读取文件内容,write()可以写入文件内容,pickle模块可以做序列化的操作,持久保持对象的信息

五、作业

请实现一个函数,输入一段文本,去掉文本中的重复单词,然后保存到一个文件中。 截图一是代码,截图二是结果,这里和实验三不一样的方法,为的是保持文本的顺序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值