建网站义乌,深圳骏域网站建设专家,网站建设的开源平台,wordpress首页链接哪里设置通常来说#xff0c;一个Python程序可以从键盘读取输入#xff0c;也可以从文件读取输入#xff1b;而程序的结果可以输出到屏幕上#xff0c;也可以保存到文件中便于以后使用。本文就来介绍Python中最基本的I/O函数。一、控制台I/O1.读取键盘输入内置函数input([prompt])一个Python程序可以从键盘读取输入也可以从文件读取输入而程序的结果可以输出到屏幕上也可以保存到文件中便于以后使用。本文就来介绍Python中最基本的I/O函数。一、控制台I/O1.读取键盘输入内置函数input([prompt])用于从标准输入读取一个行并返回一个字符串(去掉结尾的换行符)s input(Enter your input:)注在Python 3.x版本中取消了 raw_input() 函数。2.打印到屏幕最简单的输出方法是用print语句你可以给它传递零个或多个用逗号隔开的表达式print([object, ...][, sep ][, endendline_character_here][, fileredirect_to_here])方括号内是可选的sep表示分割符end表示结束符file表示重定向文件。如果要给sep、end、file指定值必须使用关键字参数。print(hello, world, sep%) # 输出 hello%worldprint(hello, world, end*) # 输出 hello world*并且不换行二、文件I/O读写文件之前先用open()函数打开一个文件它会返回一个文件对象(file object)f open(filenamemode)如果不指定mode参数文件将默认以‘r模式打开。模式中的字符有r只读w只写如果文件已存在则将其覆盖。如果该文件不存在创建新文件读写(不能单独使用)a打开文件用于追加只写不存在则创建新文件b以二进制模式打开(不能单独使用)所以可能的模式大概有r、w、r、w、rb、wb、rb、wb、a、a、ab、ab注意只有w和a可以创建文件。通常情况下文件都是以文本模式(text mode)打开的也就是说从文件中读写的是以一种特定的编码格式进行编码(默认的是 UTF-8)的字符串。如果文件以二进制模式(binary mode)打开数据将以字节对象的形式进行读写f open(a.txt,wb)f.write(I like apple!) # 报错f.write(bI like apple!) # 以bytes对象的形式进行读写Bytes对象是0到127的不可修改的整数序列或纯粹的 ASCII 字符它的用途是存储二进制数据。可以通过在一个字符串前面加上b来创建一个bytes literal也可以通过bytes() 函数创建一个 bytes 对象。注意如果bytes() 函数的初始化器是一个字符串那么必须提供一种编码。b1 bThis is stringb2 bytes(This is string, UTF-8) # 必须指定编码格式字符串对象与字节对象是不兼容的要将 bytes 转变为 str bytes 对象必须要进行解码使用decode() 方法b bytes(This is string, UTF-8)print(b, b.decode(), sep\n)# 输出# bThis is string# This is string文件对象的方法(假设f是一个文件对象)f.read(size) 读取size个字节的数据然后作为字符串或 bytes 对象返回。size是一个可选参数如果不指定size则读取文件的所有内容。f.readline() 读取一行。在字符串末尾会留下换行符 (\n)如果到文件尾返回空字符串。f.readlines() 读取所有行储存在列表中每个元素是一行相当于list(f)。f.write(string) 将 string 写入到文件中返回写入的字符数。如果以二进制模式写文件需要将string转换为 bytes 对象。f.tell() 返回文件对象当前所处的位置它是从文件开头开始算起的字节数。f.seek(offset, from_what) 改变文件对象所处的位置。offset是相对参考位置的偏移量from_what 取值 0(文件头, 默认)、1(当前位置)、2(文件尾)表示参考位置。f.close() 关闭文件对象。这些都是很常用的方法当然文件对象不止这些方法。根据打开的模式不同open() 返回的文件对象类型也不同TextIOWrapper文本模式返回TextIOWrapper对象。BufferedReader读二进制即rb返回BufferedReader对象。BufferedWriter写和追加二进制即wb、ab返回BufferedWriter对象。BufferedRandom读/写模式即含有的模式返回BufferedRandom对象。可以在这些文件对象上运行 dir() 或 help()查看它们所有的方法。补充1、在文本模式下seek()方法只会相对于文件起始位置进行定位。(除了定位文件尾可以用 seek(0, 2)之外)2、可以循环迭代一个文件对象一行一行读取for line in f:print(line, end)三、格式化输出一般来说我们希望更多的控制输出格式而不是简单的以空格分割。这里有两种方式第一种是由你自己控制。使用字符串切片、连接操作以及 string 包含的一些有用的操作。第二种是使用str.format()方法。下面给一个示例# 第一种方式自己控制for x in range(1, 11):print(str(x).rjust(2), str(x*x).rjust(3), end )print(str(x*x*x).rjust(4))# 第二种方式str.format()for x in range(1, 11):print({0:2d} {1:3d} {2:4d}.format(x, x*x, x*x*x))# 输出都是# 1 1 1# 2 4 8# 3 9 27# 4 16 64# 5 25 125# 6 36 216# 7 49 343# 8 64 512# 9 81 729# 10 100 1000第一种方式中字符串对象的 str.rjust() 方法的作用是将字符串靠右并默认在左边填充空格类似的方法还有 str.ljust() 和 str.center() 。这些方法并不会写任何东西它们仅仅返回新的字符串如果输入很长它们并不会截断字符串。我们注意到同样是输出一个平方与立方表使用str.format()会方便很多。str.format()的基本用法如下 print(We are the {} who say {}!.format(knights, Ni))We are the knights who say Ni!括号及括号里的字符将会被 format() 中的参数替换.。括号中的数字用于指定传入对象的位置 print({0} and {1}.format(Kobe, James))Kobe and James print({1} and {0}.format(Kobe, James))James and Kobe如果在 format() 中使用了关键字参数那么它们的值会指向使用该名字的参数 print(The {thing} is {adj}..format(thingflower, adjbeautiful))The flower is beautiful.可选项:和格式标识符可以跟着 field name这样可以进行更好的格式化 import math print(The value of PI is {0:.3f}..format(math.pi))The value of PI is 3.142.在:后传入一个整数可以保证该域至少有这么多的宽度用于美化表格时很有用 table {Jack:4127, Rose:4098, Peter:7678} for name, phone in table.items():... print({0:10} {1:10d}.format(name, phone))...Peter 7678Rose 4098Jack 4127我们还可以将参数解包进行格式化输出。例如将table解包为关键字参数table {Jack:4127, Rose:4098, Peter:7678}print(Jack is {Jack}, Rose is {Rose}, Peter is {Peter}..format(**table))# 输出Jack is 4127, Rose is 4098, Peter is 7678.补充% 操作符也可以实现字符串格式化。它将左边的参数作为类似 sprintf() 式的格式化字符串而将右边的代入import mathprint(The value of PI is %10.3f. %math.pi)# 输出The value of PI is 3.142.因为这种旧式的格式化最终会从Python语言中移除应该更多的使用 str.format() 。附文本模式与二进制模式1、在Windows系统中文本模式下默认是将Windows平台的行末标识符 \r\n 在读时转为 \n 而在写时将 \n 转为 \r\n 。 这种隐藏的行为对于文本文件是没有问题的但是对于二进制数据像 JPEG 或 EXE 是会出问题的。在使用这些文件时请小心使用二进制模式。2、在类Unix/Linux系统中行末标识符为 \n即文件以 \n 代表换行。所以Unix/Linux系统中在文本模式和二进制模式下并无区别。本文所述实例读者可以实际动手操作测试一下以加深印象从而进一步牢固掌握Python基础。