杨桃的Python进阶讲座6——输出和写文件

本人CSDN博客专栏:https://blog.csdn.net/yty_7

Github地址:https://github.com/yot777/

6.1 Python的输出

和大多数语言一样,Python也是用print()函数来进行输出。比如我们已经很熟悉的输出一行Hello World

#Python的print函数举例1
>>> print("Hello World")
Hello World

直接把需要输出的字符串放到print()函数就可以。在具体使用中有以下几种使用方法:

1. print()函数可以用来输出变量的值, 用法是在字符串提示符之后加上 ,(逗号)变量名 。如下:

#Python的print函数举例2
>>> a=5
>>> print("a=",a)
a= 5
>>> k = [1,2,3,4,5]
>>> print("k=",k)
k= [1, 2, 3, 4, 5]
#同时输出两个变量的值
>>> a=5
>>> b=6
>>> print("a=",a,"b=",b)
a= 5 b= 6

细心的同学会发现,在a=和5之间多了一个空格符,b=和6之间也多了一个空格符,有时候不能满足我们输出格式的要求。

2. 可以使用旧式C语言的%作为关键字的写法,对输出的格式进行设置,如下:

#Python的print函数举例3
>>> today='Sunday'
>>> wendu=15.1
>>> shidu=53
>>> days=10
>>> print("今天是%s,温度是%.3f度,湿度是%f%%,是我学习Python的第%d天" %(today, wendu, shidu, days))
今天是Sunday,温度是15.100度,湿度是53.000000%,是我学习Python的第10天

在本例中,today、wendu、shidu、days分别是字符串、浮点数、浮点数、整数,Python沿用了C语言的%关键字,说明如下:

(1)%s表示输出字符串,%f表示输出浮点数,%d表示输出整数,如果要输出一个真正的百分号,需要写两个百分号。

(2)%f可以限定输出小数的位数,%.1f(百分号点1f)表示小数点之后输出1位小数,%.2f(百分号点2f)表示小数点之后输出2位小数。如果%f没有小数位的限定,将输出6位小数。

(3)%关键字代表的变量,在输出提示符之后,要用%变量名(如果有多个变量,需要加括号)的方式一一列举出来,变量顺序要和%关键字使用的时候一致。在本例中:%s对应today,%.3f对应wendu,%f对应shidu,%d对应days

(4)输出提示符和%变量名之间没有逗号!这个初学者容易和第1种方式搞混,举例如下:

#Python的print函数举例4
>>> k=0.0
>>> print("k=",k)      #变量k和输出提示符之间是逗号
k= 0.0                 #输出结果和k=之间有个空格
>>> print("k=%f" %k)   #变量%k和输出提示字符之间是空格
k=0.000000             #输出结果和k=之间没有空格
>>> print("k=%d" %k)
k=0                    #本来变量k是浮点数,现在按照整数输出

(5)%f还可以限定输出的小数点之前的整数位数,%d、%s也可以控制输出格式,具体请参考相关手册。

3. 可以使用类似Java的 + 连接符连接输出提示符和变量,我们把举例3重写如下:

#Python的print函数举例4
>>> today='Sunday'
>>> wendu=15.1
>>> shidu=53
>>> days=10
>>> print("今天是"+str(today)+",温度是"+str(wendu)+"度,湿度是"+str(shidu)+"%,是我学习Python的第"+str(days)+"天")
今天是Sunday,温度是15.1度,湿度是53%,是我学习Python的第10天

说明如下:

(1)在使用+ 连接符的时候,每一个变量都必须转型为字符串类型,因此有str(today)、str(wendu)...不这样使用会报错:

>>> print("今天是"+str(today)+",温度是"+str(wendu)+"度,湿度是"+str(shidu)+"%,是我学习Python的第"+days+"天")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: must be str, not int     #days没有转换为字符串类型,报错

(2)注意引号和变量之间的关系,引号括起来的是输出提示符,变量不需要用引号括起来

(3)用+ 连接符连接输出提示符和变量,要注意输出格式和变量个数,引号是成对出现的,+ 连接符也是成对出现的。

print()函数输出之后默认会换行,可以在参数中加入end=""来将输出的多行变为一行,或者加上你喜欢的分隔符,举例如下:

#Python的print函数举例5
print("今天天气真好啊")           #没有end参数默认表示print()函数输出之后换下一行
print("我想出去玩")
print("有人一起吗")
运行结果:
今天天气真好啊
我想出去玩
有人一起吗

print("今天天气真好啊",end="")      #end=""表示print()函数输出之后不换行
print("我想出去玩",end="")
print("有人一起吗")
运行结果:
今天天气真好啊我想出去玩有人一起吗

print("今天天气真好啊",end=",")    #end=","表示print()函数输出之后以逗号分隔下一个输出
print("我想出去玩",end=",")
print("有人一起吗")
运行结果:
今天天气真好啊,我想出去玩,有人一起吗

print()函数的作用除了输出之外,更重要的是作为调试程序时使用。在编写一些复杂的判断、循环条件时,我们往往不能直接想到执行的结果,就需要使用print()函数将程序运行的情况实时显示出来,帮助我们判断程序的逻辑是否有问题。

在上一节Python文件读入的时候,我们就使用了print()函数来调试程序:

#定义一个空列表lineArr 
lineArr = []
#打开源文件test.txt
f = open('test.txt')
#readlines() 读取整个文件,自动将文件内容分析成一个包含所有行的列表lines
lines = f.readlines()
#遍历lines的每一行line
for line in lines:
    #将每一行先去掉回车,再以Tab符作为元素之间的分隔符号
    linenew = line.strip().split('\t')
    #len(linenew)是linenew列表长度,也就是linenew列表的元素个数
    #for in in range(m)表示i从0增加到m-1
    for i in range(len(linenew)):
    	#从linenew[0]到linenew[m-1]的每个元素都转为整型数字
    	linenew[i] = int(linenew[i])
    #将当前行的内容添加到列表lineArr 
    lineArr.append(linenew)
    #打印出当前的lineArr列表
    print("lineArr:", lineArr)
#打印出最终的lineArr列表
print("最终的lineArr:",lineArr)
#关闭文件
f.close()
 
运行结果:
lineArr: [[1, 2, 3, 4, 5]]
lineArr: [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]
lineArr: [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]]
lineArr: [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15], [16, 17, 18, 19, 20]]
最终的lineArr: [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15], [16, 17, 18, 19, 20]]

以上代码,只需要打印出最终的lineArr列表作出输出就行,但我们打印了每一行的内容添加到列表lineArr的情况,这样就很清楚的看到,这个程序确实实现了按行读取源文件test.txt

print()函数作为调试程序的功能今后还会反复出现,作为我们理解复杂程序逻辑的重要手段,大家一定要熟悉。

6.2 Python写文件

写文件和读文件类似,分为以下几步:

1、打开文件,使用open()函数进行,生成一个文件对象 f。注意open()函数的参数和读取时不同,具体如下:

f = open('test.txt', 'r')  #读取test.txt文件的内容
f = open('test.txt', 'w')  #向test.txt文件写入内容
f = open('test.txt', 'r+')  #既可以读取test.txt文件,也可以写入test.txt文件

2、写入文件,使用文件对象file的write()方法

3、关闭文件,使用文件对象file的close()方法

同样地,可以使用with语句来自动帮我们自动调用close()方法:

with open(filename, 'w') as f:
    f.write("Add a word")

文件写入举例如下:

(1)写入空文件(覆盖)

#写入空文件(覆盖)
filename = 'test.txt'
with open(filename, 'w') as file_object:
    file_object.write("Add a word")

运行这段代码后,如果写入文件不存在,open()函数将在该py文件的当前目录自动创建test.txt文件,然后写入Add a word

如果test.txt文件文件已存在,会清空已有内容后再写入Add a word

可以写多行,但如果不加换行符,实际上会写入文件的同一行:

filename = 'test.txt'
with open(filename, 'w') as file_object:
    file_object.write("Add a word")
    file_object.write("Add two words")

运行结果:

加换行符之后再写入

filename = 'test.txt'
with open(filename, 'w') as file_object:
    file_object.write("Add a word\n")
    file_object.write("Add two words\n")

运行结果:

(2)在原有文件上添加内容

将open()函数的参数由w改为a

filename = 'test.txt'
with open(filename, 'a') as file_object:
    file_object.write("abcdefj\n")
    file_object.write("hijklmn\n")
    file_object.write("opq\t")   #\t也可以作为分隔符,表示一个Tab键
    file_object.write("rst\n")
    file_object.write("uvw\t")
    file_object.write("xyz\n")

运行结果:

总结:

Python的输出使用print()函数,可以用逗号输出变量值,用%关键字输出带类型的变量值,用 + 连接符连接输出提示符和变量。

print()函数默认是换行的,可以在参数中加入end=""来将输出的多行变为一行。

print()函数的作用除了输出之外,更重要的是作为调试程序时使用。

Python写文件和读文件类似,都是打开,写入,关闭3个步骤,但注意open()函数的参数和读取时不同:

r是读取 w是写入 r+是既可以读也可以写 a是在原文件基础上追加写入

本人CSDN博客专栏:https://blog.csdn.net/yty_7

Github地址:https://github.com/yot777/

如果您觉得本篇本章对您有所帮助,欢迎关注、评论、点赞!Github欢迎您的Follow、Star!

发布了55 篇原创文章 · 获赞 16 · 访问量 6111

猜你喜欢

转载自blog.csdn.net/yty_7/article/details/104338218
今日推荐