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}')
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,064评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,606评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,011评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,550评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,465评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,919评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,428评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,075评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,208评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,185评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,191评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,914评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,482评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,585评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,825评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,194评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,703评论 2 339

推荐阅读更多精彩内容