Python 输入输出

str和repr内置函数

在介绍Python的输入输出之前,我们先来介绍两个内置函数,str()repr(),它们都用来输出对象的字符串形式。不过它们之间有一个重要区别,repr()主要输出解释器可以读取的字符串形式,而str()输出人类易读的字符串形式。

当然虽然它们之间有区别,但是很多类型的str()repr()形式完全相同。

print('--------------str函数--------------')

a_list = [1, 2, 3, 4, 5]
print(f'str():{str(a_list)}')

print('--------------repr函数--------------')
print(f'repr():{repr(a_list)}')

字符串格式化

format函数

介绍了内置函数之后,下面我们来介绍一下Python字符串格式化的方法。首先是位置参数的方式。我们需要调用字符串上面的format()函数,然后按照{0}这样的顺序将参数传入。

print('--------------字符串格式化--------------')

name = 'yitian'
age = 24
sentence = '{0} is {1} years old'.format(name, age)
print(sentence)

当然也可以使用命名参数方式。这样字符串中需要修改为{name}这样的形式,format函数中也需要使用关键字参数方式传值。

sentence = '{name} is {age} years old'.format(name=name, age=age)
print(sentence)

数字格式化

如果需要格式化数字,需要在字符串的占位符中添加冒号和格式化符号。要格式化的是浮点数,就用:.3f这样的符号,小数点后面的数字代表要精确到的小数点后数位;要格式化的是正数,就是用:5d这样的,d前面的数字表示前面要空的位数。如果使用命名参数的话把占位符数字改为参数名即可。

import math
print('PI is {0:.3f}'.format(math.pi))
print('100 is {integer:5d}'.format(integer=100))

结果如下。

PI is 3.142
100 is   100

格式化字符串

以前我也学了一点Python,不过就小小的入了个门。这次重新学习的时候,我第一件要了解的事情就是格式化字符串(formatted string),这个特性在C#、Kotlin等很多语言中都有,使用非常方便。

格式化字符串需要在字符串前面添加一个f,表示这是格式化字符串,这样,字符串中就不需要占位符并调用format()方法了。我们可以将字符串和要插入的值写在一起。Python会帮我们执行实际的字符串格式化操作。如果需要格式化符,只要在花括号中插入冒号并在后面跟上即可。

print('--------------格式化字符串--------------')
print(f'PI is {math.pi:.4f}')

这种方式最方便。所以我在需要格式化字符串的地方都使用了这种方式。

旧式格式化

如果你学习过Python2.7 之类的旧Python版本,应该对下面的格式化方式很熟悉。

>>> import math
>>> print('The value of PI is approximately %5.3f.' % math.pi)
The value of PI is approximately 3.142.

不过由于这是一种旧的方式,可能在Python3中被移除。所以我们最好还是使用前面几种。

终端输入和输出

终端输入

终端输入很简单,使用input()函数即可。input()函数还可以接受一个提示字符串,在接受用户输入前会打印提示字符串,为用户做一些提示。input()函数返回的是输入的字符串形式,即使输入的是数字。所以如果输入的是数字之类的信息,我们需要进行转换才能使用。

print('--------------终端输入--------------')
input_string = input('Please input some words:')
print(input_string)

终端输出

终端输出其实不用介绍了,用的使我们到目前为止非常熟悉的一个函数print()print()函数可以接受多个参数来输出。如果需要对输出形式进行控制,可以设置print()函数的sepend参数。sep是多个输出之间的分隔符,默认是一个空格。而end是输出的结尾,默认是换行。

print('--------------终端输出--------------')

print('这是一段输出', '下一段输出', sep=',', end='\n')

再举一个例子,输出九九乘法表。{i*j:<5}的作用是数据宽度为5,左边不足的用空格补充。

print('--------------九九乘法表--------------')
for i in range(1, 10):
    for j in range(1, i + 1):
        print(f'{j}X{i}={i*j:<5}', end='')
    print()

结果是非常漂亮的三角形。

--------------九九乘法表--------------
1X1=1    
1X2=2    2X2=4    
1X3=3    2X3=6    3X3=9    
1X4=4    2X4=8    3X4=12   4X4=16   
1X5=5    2X5=10   3X5=15   4X5=20   5X5=25   
1X6=6    2X6=12   3X6=18   4X6=24   5X6=30   6X6=36   
1X7=7    2X7=14   3X7=21   4X7=28   5X7=35   6X7=42   7X7=49   
1X8=8    2X8=16   3X8=24   4X8=32   5X8=40   6X8=48   7X8=56   8X8=64   
1X9=9    2X9=18   3X9=27   4X9=36   5X9=45   6X9=54   7X9=63   8X9=72   9X9=81 

文件读写

open内置函数

文件读取

最简单的文件读写方式就是open(filename, mode)内置函数了,filename参数指定要读写的文件名,mode指定了文件模式,模式可以是w(只写)、r(只读)、a(追加)、r+(读写)、b(二进制),默认是r

下面的例子读取了Windows操作系统下的hosts文件。

print('--------------open内置函数--------------')

hosts_file=open(r'C:\Windows\System32\drivers\etc\hosts')

print(hosts_file.read())

f.read(size)函数会返回指定大小的文件内容,如果文件是文本模式(默认的),返回的就是字符串;如果文件是二进制模式(使用了模式b),那么返回的就是二进制对象。如果size未指定,就会返回整个文件内容。如果文件比较大,使用该方法就需要格外注意了。

f.readline()函数返回文件的一行,再次调用返回下一行。如果返回空行代表文件已到末尾了。

还可以直接遍历文件内容。这种方式很高效,因为每次只读了一行,所以即使是大文件也可以顺利读取完毕。如果需要将文件读取为列表,可以使用f.readlines()函数。

>>> for line in f:
...     print(line, end='')

文件用完之后需要调用close()方法关闭,也可以使用with语句自动关闭文件。

with open('test.txt', 'w') as output:
    .........
    .........

文件写入

文件写入使用write函数即可。需要注意如果需要写入一个新文件,记得把模式修改为w,如果使用r+的话会提示文件不存在。

下面这个例子将上面的hosts文件内容保存到另一个文件中。

import os

with open('test.txt', 'w') as output:
    output.write('# This is a test file' + os.linesep)
    output.writelines(hosts_content)

下面是文件写入函数的简单总结。

函数名 作用
write 写入内容到文件
writelines 写入所有行到内容
seek 将游标移动到指定字节

json读写

json处理是一项非常常见的任务。说实话动态语言更适合处理json,因为json本来就是动态语言JavaScript的格式。相对来说,静态语言处理json要麻烦一点,比如Java要处理json,首先需要编写一个实体类,然后用类库提供的注解将json的值与类的属性对应起来。而动态语言就没这么麻烦,直接读到对象中,然后使用就行了。

python标准库中提供了json库,可以非常方便的在python对象和json字符串之间进行转换。json库的使用也非常简单,主要就4个函数:dump(输出json到文件)、dumps(输出json到字符串)、load(从文件加载对象)、loads(从字符串加载对象)。

print('--------------json--------------')

import json

string1 = json.dumps([1, 2, 3, 'fuck'])
print(f'string1:{string1}')

personal_info = {'name': 'yitian', 'age': 24, 'gender': 'male'}
string2 = json.dumps(personal_info)
print(f'string2:{string2 }')

json1 = json.loads('[1,2,3,4,"5"]')
print(f'json1:{json1}')
json2 = json.loads('[{"name":"yitian","age":24},{"name":"zhang3","age":25}]')
print(f'json2:{json2}')
上一篇:更效率、更优雅 | 阿里巴巴开发者工具不完全盘点


下一篇:5迪米特法则LoD