简明Python3教程 14.输入输出
简介
一些情况下你不得不让程序与用户进行交互。例如,你需要从用户处得到输入然后输出计算结果。我们可以分别通过input()和print()函数做到这些。
对于输出,我们还可以使用str(string)类的各种方法。例如rjust方法可以得到一个指定宽度的右对齐字符串。详见help(str)。
另一种常见的输入/输出类型为文件处理。对于很多程序拥有创建,读写文件的能力是必不可少的,我们会在这节探究这些内容。
得到用户输入
#!/usr/bin/python
# user_input.py
def reverse(text):
return text[::-1]
def is_palindrome(text):
return text == reverse(text)
something = input('Enter text: ')
if (is_palindrome(something)):
print("Yes, it is a palindrome")
else:
print("No, it is not a palindrome")
输出:
$ python user_input.py
Enter text: sir
No, it is not a palindrome
$ python user_input.py
Enter text: madam
Yes, it is a palindrome
$ python user_input.py
Enter text: racecar
Yes, it is a palindrome
范例如何工作:
范例中我们使用切片操作反转文本。之前我们已经学过如何通过seq[a:b](从a开始止于b)对序列切片。
对于切片操作我们还可以指定第三个参数步长,步长默认为1将返回文本的一个连续部分。而给定一个负步长-1将返回反转后的文本。
input()函数接收一个字符串实参并将其打印给用户,然后函数等待用户输入一些东西,一但用户按下回车键则输入结束,input函数将返回输入的文本。
之后我们反转文本,如果反转后的文本与原文本相同,则代表它是一个回文(http://en.wiktionary.org/wiki/palindrome)。
练习题:
检测一个文本是否为回文应该忽略标点,空格和大小写。
例如”Rise to vote, sit.”同样是一个回文,但是我们当前的例子无法识别它。你能改善这个例子让它做都这点吗?
文件
通过创建file类对象,使用其read, readline或write方法你可以对文件进行读写。
具体读或写的方式依赖于你打开文件时指定的模式。
最后当你完成文件操作时调用close关闭文件。
范例:
#!/usr/bin/python
# Filename: using_file.py
poem = '''/
Programming is fun
When the work is done
if you wanna make your work also fun:
use Python!
'''
f = open('poem.txt', 'w') # 写模式打开
f.write(poem) # 写文件
f.close() # 关闭文件
f = open('poem.txt') # 如果没有提供打开模式, 则默认假设为读模式
while True:
line = f.readline()
if len(line) == 0: # 长度为0代表EOF(注: end of file即文件尾)
break
print(line, end='')
f.close() # close the file
输出:
$ python using_file.py
Programming is fun
When the work is done
if you wanna make your work also fun:
use Python!
范例如何工作:
首先,我们通过内建函数open打开一个文件,在函数中我们指定了被打开文件的文件名与希望使用的打开模式。
其中打开模式可以为读模式(‘r’),写模式(‘w’)或追加模式(‘a’)。另外我们也可以处理文件文件(‘t’)和二进制文件(‘b’)。
实际上还有很多模式可用,详见help(open)。默认的open将文件对待为文本文件’t’,并以读模式’r’打开。
在范例中,我们首先以写文本模式打开文件,使用文件对象的write方法写文件,并调用close将其关闭。
然后我们再次打开相同的文件用于读取。这里我们无需指定打开模式因为’读文本文件’是open的默认模式。
在循环中我们使用readline方法读取文件的每一行。这个方法返回一整行文本其中包括末尾的换行符。
当返回一个空字符串时,意味着我们已经来到文件尾,因此使用break跳出循环。
默认的,print()函数将自动打印一个换行。因为从文件读出的文本行末尾已经包含一个换行,所以我们指定参数end=’’抑制换行。
最后我们关闭文件。
现在,检查poem.txt文件内容以确定程序真的写入并读取了文件。
Pickle
python提供了一个名为pickle的标准模块用于将任意python对象存入文件或从文件中读出。这被称做永久性存储对象(persistently)。
范例:
#!/usr/bin/python
# Filename: pickling.py
import pickle
# the name of the file where we will store the object
shoplistfile = 'shoplist.data'
# the list of things to buy
shoplist = ['apple', 'mango', 'carrot']
# Write to the file
f = open(shoplistfile, 'wb')
pickle.dump(shoplist, f) # 转储对象到文件
f.close()
del shoplist # 销毁shoplist变量
# 从文件找回对象
f = open(shoplistfile, 'rb')
storedlist = pickle.load(f) # 从文件加载对象
print(storedlist)
输出:
$ python pickling.py
['apple', 'mango', 'carrot']
范例如何工作:
为了将对象存储到文件,我们必须首先’wb’写二进制文件模式打开文件然后调用pickle模块的dump函数。这个过程叫做封藏(pickling)对象。
接下来我们使用pickle的load函数重新找回对象。这个过程叫做解封(unpickling)对象。
小结
我们已经讨论了各种形式的输入/输出,和利用pickle模块进行文件处理。
接下来,我们将会学习异常处理。
简明Python3教程 14.输入输出的更多相关文章
- 简明Python3教程(A Byte of Python 3)
关键字:[A Byte of Python v1.92(for Python 3.0)] [A Byte of Python3] 简明Python教程 Python教程 简明Python3教程 简明 ...
- 简明Python3教程 18.下一步是什么
如果你有认真通读本书之前的内容并且实践其中包含的大量例程,那么你现在一定可以熟练使用python了. 同时你可能也编写了一些程序用于验证python特性并提高你的python技能.如果还没有这样做的话 ...
- 简明Python3教程 16.标准库
简介 python标准库作为python标准安装的一部分,其自身包含数量庞大的实用模块, 因此熟悉python标准库非常重要,因为很多问题都能利用python标准库快速解决. 下面我们将研究标准库中的 ...
- 简明Python3教程 9.函数
简介 函数是程序的可复用片段,允许你为语句块赋予名字之后在程序的任何地方运行它们任意次,这称做函数调用. 我们已经使用过一些内建函数,例如len和range等. 函数也许是任何有意义的软件中最重要的构 ...
- 简明Python3教程 7.运算符和表达式
简介 你写的大多数逻辑行都包含表达式.表达式的一个简单例子是2 + 3.一个表达式可分为操作符和操作数两部分. 操作符的功能是执行一项任务:操作符可由一个符号或关键字代表,如+ .操作符需要数据以供执 ...
- 简明Python3教程 6.基础
你肯定不满足于只打印"Hello World"吧? 你想要的更多 - 你希望得到一些输入,操纵它后再从中得到某些东西.我们可以使用python中的常量和变量实现这些功能. 字面常量 ...
- 简明Python3教程 5.第一步
介绍 我们现在来看看如何在Python中运行传统的”Hello world”程序.这会教你如何写.保存以及运行Python程序. 有两种办法来运行您的Python程序——使用交互式的解释器提示符或者源 ...
- 简明Python3教程 4.安装
如果你已经安装了Python 2.x,你不需要在安装Python 3.0前卸载Python 2.x.这两者可以共存. GNU/Linux用户和BSD用户 如果你使用类似于Ubuntu.Fedora.O ...
- 简明Python3教程 2.序言
Python也许是为数不多的既简单又强大的编程语言.这有利于新手甚至于专家,更重要的是用它编程所带来的乐趣. 这本书的目的是帮助您了解这种神奇的语言,展示如何快速而轻松地完成事情——事实上”编程问题的 ...
随机推荐
- Java Tread多线程(2)多线程安全问题
作者 :卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/39348093 本文演示,Tread多线程安全问题,以及几种解决多线程安全方式 ...
- mysql select 无order by 默认排序 出现乱序的问题
原文:mysql select 无order by 默认排序 出现乱序的问题 版权声明:感谢您的阅读,转载请联系博主QQ3410146603. https://blog.csdn.net/newMan ...
- 快速杀死占用8080端口进程的批处理(kill-8080.bat)
@echo off setlocal enabledelayedexpansion for /f "delims= tokens=1" %%i in ('netstat -aon ...
- Emmet超详细教程
Emmet超详细教程 一.总结 一句话总结:用的时候照着用,能提高效率. 1.快捷键如何使用? 需要敲代码的时候把快捷键放到旁边即可.照着敲. 二.Emmet超详细教程 Emmet的前身是大名鼎鼎的Z ...
- angular2的编译模式之AOT和JIT
原文 https://www.jianshu.com/p/c959d90e91ce 大纲 1.angular应用为什么需要编译 2.angular的编译模式类型 3.JIT(Just-In-Time) ...
- 制作Kinect体感控制小车教程 <一>
转载请注明出处:http://blog.csdn.net/lxk7280 Kinect体感控制小车 Kine ...
- HDU - 3078 Network(暴力+LCA)
题目大意:给出n个点的权值.m条边,2种操作 0 u num,将第u个点的权值改成num k u v,询问u到v这条路上第k大的权值点 解题思路:该点的话直接该,找第k大的话直接暴力 #include ...
- 【编程】常见概念的理解 —— inplace、vanity url、vanilla(code/software)、编译、链接、build、(delegate、proxy)
inplace: 如修改一个文件等对象时, inplace=True,不创建新的对象,直接在原始对象上尽心修改: inplace=False,在对原始对象进行修改,而会创建新的对象: vanity u ...
- form表单上传附件的几种方法
问题描述:在网页开发过程中,当需要上传附件(图片,音频,视频等)时,常规方法是使用form表单进行提交,这里总结一下form表单提交的几种方法. 参考地址:http://www.cnblogs.com ...
- 《编程导论(Java)·3.2.4 循环语句》
本文全然复制<编程导论(Java)·3.2.4 循环语句>的内容.除[]中的说明文字.请阅读和比較其它编程教材. 我知道.假设我是一个刚開始学习的人,<编程导论(Java)>非 ...