【Python3学习笔记】之【Python基础——输入和输出】

输出格式美化

Python 有两种输出值得方式:表达式语句print() 函数。

第三种方式是使用文件对象的 write() 方法,标准输出文件可以使用 sys.stdout 引用。

如果你希望输出形式更多样,可以使用 str.format() 函数来格式化输出值。

如果你希望输出的值转换为字符串,可以使用 repr()str() 函数来实现。

str() 和 repr()

  • str():函数返回一个用户易读的表达形式
  • repr():产生一个解释器易读的表达形式
name = 'Job'
gender = 'male'
print(str(name))
print(repr(name))
str1 = 'name:' + repr(name) + ',gender:' + repr(gender)
print(str1)
Job
'Job'
name:'Job',gender:'male'

repr()函数可以转移字符串中的特殊字符串,其参数可以为任意类型。

输出一个3*10矩阵

for x in range(1, 11):
    print(repr(x).rjust(2), repr(x * x).rjust(3), repr(x * x * x).rjust(4))
    # rjust(2)代表右对齐占两位
 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

另一种方法:

for x in range(1, 11):
    print('{0:2d} {1:3d} {2:4d}'.format(x, x * x, x * x * x))
    # 0,1,2分别代表x,x*x,x*x*x
    # 2d代表两位数整数
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

zfill()

类似的方法还有zfill(),它会在数字左边填充0,注意zfill只对字符串有效:

str1 = '3.14'
print(str1.zfill(6))

format()

str.format() 的基本使用如下:

print('{}网址:{}'.format('百度', 'www.baidu.com'))
百度网址:www.baidu.com

括号及其里面的字符(称作格式化字段)将会被format() 中的参数替换。
在括号中的数字用于指向传入对象在format() 中的位置(从0开始):

# 将括号里的填入的顺序反转
print('{1}网址:{0}'.format('百度', 'www.baidu.com'))
www.baidu.com网址:百度

如果在括号中使用了关键字参数就会直接指向关键字:

print('{name}网址:{str1}'.format(name='百度', str1='www.baidu.com'))
百度网址:www.baidu.com

索引和关键字可以结合使用。

!a (使用 ascii()), !s (使用 str()) 和 !r (使用 repr()) 可以用于在格式化某个值之前对其进行转化。还可以使用可选项 : 和格式标识符跟着字段名。这就允许对值更好的格式化。

num1 = 3.1415927
dic = {1: 'taobao', 2: 'jingdong', 3: 'suning'}

print('PI 近似于:{!s}'.format(num1))
print('PI 近似于:{:.2f}'.format(num1))
for number, name in dic.items():
    print('{0:10d}:{1:10}'.format(number, name))
num1 = 3.1415927
dic = {1: 'taobao', 2: 'jingdong', 3: 'suning'}

print('PI 近似于:{!s}'.format(num1))
print('PI 近似于:{:.2f}'.format(num1))
for number, name in dic.items():
    print('{0:10d}:{1:10}'.format(number, name))

旧字符串格式化

% 操作符也可以实现字符串格式化。它将参数作为类似sprintf() 式的格式化字符串,而将右边带入,然后返回格式化后的字符串。如:

import math

print('PI 近似为:%.2f' % math.pi)
PI 近似为:3.14

因为 str.format() 是比较新的函数, 大多数的 Python 代码仍然使用 % 操作符。但是因为这种旧式的格式化最终会从该语言中移除, 应该更多的使用 str.format()。

读取键盘输入

python 提供了input() 内置函数从标准输入读取一行文本,默认的标准输入是键盘。
input 可以接受一个python 表达式作为输入,并将运算结果返回。

str = input("请输入:");
print ("你输入的内容是: ", str)
请输入:HelloWorld
你输入的内容是:  HelloWorld

读写文件

open() 将会返回一个file 对象,基本语法格式如下:

open(filename, mode)
  • filename:包含了你要访问的文件名称的字符串值。
  • mode:决定了打开文件的模式:只读,写入,追加等。这个参数非强制,默认为只读。

模式列表:

模式描述
r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。
r+打开一个文件用于读写。文件指针将会放在文件的开头。
rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
w+打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

模式rr+ww+aa+
++++
+++++
创建++++
覆盖++
指针在开始++++
指针在结尾++

将以下字符串写入文件test1中:

# 打开一个文件
f = open('test1.txt', 'w+')
# 写
for i in range(3):
    f.write('HelloWorld!\n'
            '你好世界!\n')
# 关
f.close()

此时会创建一个test1.txt的文件,打开后会看到:

HelloWorld!
你好世界!
HelloWorld!
你好世界!
HelloWorld!
你好世界!

文件对象的方法

f.read()

为了读取一个文件的内容,调用r.read(size),这将读取一定数目的数据,然后作为字符串或者字节对象返回。
size 是一个可选数字型的参数。当size 被忽略了正或者负,那么该文件的所有内容都将被读取并且返回。

# 打开一个文件
f = open('test1.txt', 'r')
# 读
str1 = f.read()
print(str1)
# 关
f.close()
HelloWorld!
你好世界!
HelloWorld!
你好世界!
HelloWorld!
你好世界!

f.readline()

f.readline() 会从文件中读取单独的一行。换行符为’\n’。f.readline() 如果返回一个空字符串,说明已经读到了最后一行。

# 打开一个文件
f = open('test1.txt', 'r')
# 读
str1 = f.readline()
print(str1)
# 关
f.close()
HelloWorld!

f.readlines()

f.readlines() 将返回文件中包含的所有行。
如果设置可选参数sizehint,则读取指定长度的字节,并且将这些字节按行分割。

# 打开一个文件
f = open('test1.txt', 'r')
# 读
str1 = f.readlines()
print(str1)
# 关
f.close()
['HelloWorld!\n', '你好世界!\n', 'HelloWorld!\n', '你好世界!\n', 'HelloWorld!\n', '你好世界!\n', 'HelloWorld!\n', '你好世界!\n', 'HelloWorld!\n', '你好世界!\n']

for line in f:

另一种读取方式是迭代一个文件对象然后读取每行:

# 打开一个文件
f = open('test1.txt', 'r')
# 读
for line in f:
    print(line, end='')
# 关
f.close()
HelloWorld!
你好世界!
HelloWorld!
你好世界!
HelloWorld!
你好世界!

f.write()

f.write(string) 将 string 写入文件中,然后返回写入的字符数。

# 打开一个文件
f = open('test1.txt', 'a')
# 写
num = f.write('!!!!!!')
if num > 0:
    print('追加写入成功!写入了{}个字符'.format(num))
else:
    print('写入失败')
# 关
f.close()
追加写入成功!写入了6个字符

打开写入的文件:

HelloWorld!
你好世界!
HelloWorld!
你好世界!
HelloWorld!
你好世界!!!!!!!

如果要写入不是字符串的东西要进行转换:

# 打开一个文件
f = open('test1.txt', 'a')
# 写
list1 = [1, 2, 3]
str1 = str(list1)
num = f.write(str1)
if num > 0:
    print('追加写入成功!写入了{}个字符'.format(num))
else:
    print('写入失败')
# 关
f.close()
追加写入成功!写入了9个字符

打开写入文件:

HelloWorld!
你好世界!
HelloWorld!
你好世界!
HelloWorld!
你好世界!!!!!!![1, 2, 3]

f.tell()

返回文件对象当前所处的位置,它是从文件开头算起的字节数。

f.seek()

如果想要改变文件当前位置,可以使用f.seek(offset,from_what)函数(适用于二进制文件)。
from_what 的值,如果是0表示开头,如果是1 表示当前位置,2 表示文件的结尾,例如:

  • seek(x,0):从起始位置开始移动x个字符
  • seek(x,1):表示从当前位置往后移动x 个字符
  • seek(-x,2):表示从文件末尾往前移动x个字符
# 开
f = open('test1.txt', 'rb+')
# 写
f.write(b'abcdefghijklmnopqrstuvwxyz')
f.seek(5)  # 将指针移动到第六个位置
str1 = f.read(1)
print(str1)
f.seek(-3,2)
str1 = f.read(1)
print(str1)
# 关
f.close()
b'f'
b'x'

f.close()

在文本文件中(那些打开模式下没有b的),只会相对于文件起始位置定位。
当你处理完一个文件后,调用f.close() 来关闭文件并释放系统资源。

pickle 模块

pickle 模块实现了基本的数据序列和反序列化。
通过pickle 模块的序列化操偶作我们能够将程序中运行的对象信息保留到文本中去,永久储存。
通过pickle 模块的反序列化操作,我们能够从文件中创建上一次程序保存对象。

基本接口:

pickle.dump(obj, file, [,proticol])

有了pickle 这个对象,就能对file 以读取的形式打开:

x = pickle.load(file)

注解:从file 中读取一个字符串,并将它重构为原来的python对象

import pickle

list1 = [1, 2, 3]
# 开
f = open('test1.txt', 'wb')
# 写
pickle.dump(list1, f)
# 关
f.close()
# 开
f = open('test1.txt', 'rb')
# 读
list1 = pickle.load(f)
print(list1)
# 关
f.close()
[1, 2, 3]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值