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()
函数的sep
和end
参数。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}')