简介

一些情况下你不得不让程序与用户进行交互。例如,你需要从用户处得到输入然后输出计算结果。我们可以分别通过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, readlinewrite方法你可以对文件进行读写。

具体读或写的方式依赖于你打开文件时指定的模式。

最后当你完成文件操作时调用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.输入输出的更多相关文章

  1. 简明Python3教程(A Byte of Python 3)

    关键字:[A Byte of Python v1.92(for Python 3.0)] [A Byte of Python3] 简明Python教程 Python教程 简明Python3教程  简明 ...

  2. 简明Python3教程 18.下一步是什么

    如果你有认真通读本书之前的内容并且实践其中包含的大量例程,那么你现在一定可以熟练使用python了. 同时你可能也编写了一些程序用于验证python特性并提高你的python技能.如果还没有这样做的话 ...

  3. 简明Python3教程 16.标准库

    简介 python标准库作为python标准安装的一部分,其自身包含数量庞大的实用模块, 因此熟悉python标准库非常重要,因为很多问题都能利用python标准库快速解决. 下面我们将研究标准库中的 ...

  4. 简明Python3教程 9.函数

    简介 函数是程序的可复用片段,允许你为语句块赋予名字之后在程序的任何地方运行它们任意次,这称做函数调用. 我们已经使用过一些内建函数,例如len和range等. 函数也许是任何有意义的软件中最重要的构 ...

  5. 简明Python3教程 7.运算符和表达式

    简介 你写的大多数逻辑行都包含表达式.表达式的一个简单例子是2 + 3.一个表达式可分为操作符和操作数两部分. 操作符的功能是执行一项任务:操作符可由一个符号或关键字代表,如+ .操作符需要数据以供执 ...

  6. 简明Python3教程 6.基础

    你肯定不满足于只打印"Hello World"吧? 你想要的更多 - 你希望得到一些输入,操纵它后再从中得到某些东西.我们可以使用python中的常量和变量实现这些功能. 字面常量 ...

  7. 简明Python3教程 5.第一步

    介绍 我们现在来看看如何在Python中运行传统的”Hello world”程序.这会教你如何写.保存以及运行Python程序. 有两种办法来运行您的Python程序——使用交互式的解释器提示符或者源 ...

  8. 简明Python3教程 4.安装

    如果你已经安装了Python 2.x,你不需要在安装Python 3.0前卸载Python 2.x.这两者可以共存. GNU/Linux用户和BSD用户 如果你使用类似于Ubuntu.Fedora.O ...

  9. 简明Python3教程 2.序言

    Python也许是为数不多的既简单又强大的编程语言.这有利于新手甚至于专家,更重要的是用它编程所带来的乐趣. 这本书的目的是帮助您了解这种神奇的语言,展示如何快速而轻松地完成事情——事实上”编程问题的 ...

随机推荐

  1. CSS垂直居中的实现

    这个问题可以说是老生常谈了,面试时经常问道,一直没整理过,这次做个系统梳理 1.利用display:table实现 从caniuse.com上查到,display:table可以兼容到IE8,以目前环 ...

  2. LOG4J中日志级别的使用

    <logger name="demo-log" additivity="false"> <level value="${log.le ...

  3. iOS开发之Quartz2D 六 绘制UIImageView

    #import <UIKit/UIKit.h> @interface XMGImageView : UIView /** <#注释#> */ @property (nonato ...

  4. sysbench压测Oracle

    安装: yum -y install make m4  autoconf automake libtool pkgconfig libaio-devel rpm -Uvh http://dl.fedo ...

  5. QueryRunner类常用的方法

    public Object query(Connection conn, String sql, Object[] params, ResultSetHandler rsh) throws SQLEx ...

  6. RSA解密时javax.crypto.BadPaddingException: Data must start with zero

    解决方法:要在加密后产生的byte数组转成string时要在各byte之间加个标识符,我加了个空格,然后再根据空格分隔转换回byte数组.如果不加标识符,由于byte值可能是一位到三位,无法知道某一个 ...

  7. [Ramda] Declaratively Map Data Transformations to Object Properties Using Ramda evolve

    We don't always control the data we need in our applications, and that means we often find ourselves ...

  8. C++ 快速入门笔记:面向对象编程

    类 & 对象 类定义 class Box { public: double length; // Length of a box double breadth; // Breadth of a ...

  9. NSString与int和float的相互转换

    NSString *tempA = @"123"; NSString *tempB = @"456"; 1,字符串拼接 NSString *newString ...

  10. 【hdu2457】ac自动机 + dp

    传送门 题目大意: 给你一个字符主串和很多病毒串,要求更改最少的字符使得没有一个病毒串是主串的子串. 题解: ac自动机 + dp,用病毒串建好ac自动机,有毒的末尾flag置为true 构建fail ...