文章目录
- 一、输出格式美化
- 二、旧式字符串格式化
- 三、读取键盘输入
- 四、读和写文件
- 五、文件对象的方法
- 六、pickle 模块
一、输出格式美化
- 将输出的值 转成字符串 ,可以使用
repr() OR str()
函数来实现
>>> s = 'Hello, Huawei'
>>> str(s)
'Hello, Huawei'
>>> repr(s)
"'Hello, Huawei'"
>>> str(1/7)
'0.14285714285714285'
>>> x = 10 * 3.25
>>> y = 200 * 200
>>> s = 'x 的值为: ' + repr(x) + ', y 的值为:' + repr(y) + '...'
>>> print(s)
x 的值为: 32.5, y 的值为:40000...
>>>
... hello = 'Hello, Huawei\n'
>>> hellos = repr(hello)
>>> print(hellos)
'ello, Huawei\n'
>>>
... repr((x, y, ('Google', 'Huawei')))
"(32.5, 40000, ('Google', 'Huawei'))"
- 输出的 形式更加多样 ,可以使用
str.format()
函数来格式化输出值
>>> for x in range(1, 11):
...
... print(repr(x).rjust(2), repr(x*x).rjust(3), end=' ')
... print(repr(x*x*x).rjust(4))
...
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))
...
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
>>> import math
>>> print('常量 PI 的值近似为: {}。'.format(math.pi))
常量 PI 的值近似为: 3.141592653589793。
>>> print('常量 PI 的值近似为: {!r}。'.format(math.pi))
常量 PI 的值近似为: 3.141592653589793。
>>> table = {'Google': 1, 'Huawei': 2, 'Taobao': 3}
>>> print('Huawei: {0[Huawei]:d}; Google: {0[Google]:d}; Taobao: {0[Taobao]:d}'.format(table))
Huawei: 2; Google: 1; Taobao: 3
>>> table = {'Google': 1, 'Huawei': 2, 'Taobao': 3}
>>> print('Huawei: {Huawei:d}; Google: {Google:d}; Taobao: {Taobao:d}'.format(**table))
Huawei: 2; Google: 1; Taobao: 3
二、旧式字符串格式化
- 大多数的
Python
代码仍然使用 %
操作符,但是因为这种旧式的格式化 最终会从该语言中移除 , 应该更多的使用 str.format()
>>> import math
>>> print('常量 PI 的值近似为:%5.3f。' % math.pi)
常量 PI 的值近似为:3.142
三、读取键盘输入
>>> str = input("请输入:")
请输入:Hello
>>> str
'Hello'
四、读和写文件
open(filename, mode)
序号 |
模式 |
描述 |
01 |
r |
打开一个文件只用于 只读 。文件指针将会放在文件的 开头 |
02 |
rb |
以 二进制格式 打开一个文件用于 只读 。文件指针将会放在文件的 开头 |
03 |
r+ |
打开一个文件用于 读写。文件指针将会放在文件的 开头 |
04 |
rb+ |
以 二进制格式打开一个文件用于 读写 。文件指针将会放在文件的 开头 |
05 |
w |
打开一个文件只用于 写入 。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件 |
06 |
wb |
以 二进制格式 打开一个文件只用于 写入 。如果该文件 已存在 则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件 不存在 ,创建新文件 |
07 |
w+ |
打开一个文件用于 读写。如果该文件 已存在 则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件 不存在 ,创建新文件 |
08 |
wb+ |
以 二进制格式 打开一个文件用于 读写。如果该文件 已存在 则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件 不存在,创建新文件 |
09 |
a |
打开一个文件用于 追加 。如果该文件已存在,文件指针将会放在文件的 结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件 不存在 ,创建新文件进行 写入 |
10 |
ab |
以 二进制格式 打开一个文件用于 追加。如果该文件 已存在,文件指针将会放在文件的 结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件 不存在 ,创建新文件进行 写入 |
11 |
a+ |
打开一个文件用于 读写 。如果该文件 已存在 ,文件指针将会放在文件的 结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于 读写 |
12 |
ab+ |
以 二进制格式 打开一个文件用于 追加 。如果该文件 已存在 ,文件指针将会放在文件的 结尾 。如果该文件 不存在 ,创建新文件用于 读写 |
序号 |
模式 |
r |
r+ |
w |
w+ |
a |
a+ |
01 |
读 |
+ |
+ |
|
+ |
|
+ |
02 |
写 |
|
+ |
+ |
+ |
+ |
+ |
03 |
创建 |
|
|
+ |
+ |
+ |
+ |
04 |
覆盖 |
|
|
+ |
+ |
|
|
05 |
指针在开始 |
+ |
+ |
+ |
+ |
|
|
06 |
指针在结尾 |
|
|
|
|
+ |
+ |
f = open("/tmp/foo.txt", "w")
f.write( "Python 是一个非常好的语言。\n是的,的确非常好!!\n" )
f.close()
五、文件对象的方法
f.read(size)
读取一个文件的内容,返回 字符串或字节对象,可设置 size
,则读取指定长度的字节
f = open("/tmp/foo.txt", "r")
str = f.read()
print(str)
f.close()
-> Python 是一个非常好的语言。
-> 是的,的确非常好!!
f.readline()
会根据换行符为 '\n'
从文件中 读取单独的一行 , 如果返回一个空字符串, 说明已经已经读取到最后一行
f = open("/tmp/foo.txt", "r")
str = f.readline()
print(str)
f.close()
-> Python 是一个非常好的语言。
f.readlines(sizehint)
将返回该文件中包含的 所有行 ,可设置 sizehint
,则读取指定长度的字节, 并且将这些字节 按行分割
f = open("/tmp/foo.txt", "r")
str = f.readlines()
print(str)
f.close()
-> ['Python 是一个非常好的语言。\n', '是的,的确非常好!!\n']
f = open("/tmp/foo.txt", "r")
for line in f:
print(line, end='')
f.close()
-> Python 是一个非常好的语言。
-> 是的,的确非常好!!
f.write(string)
将 字符串 写入到文件中,返回写入的 字符数
f = open("/tmp/foo.txt", "w")
num = f.write("Python 是一个非常好的语言。\n是的,的确非常好!!\n")
print(num)
f.close()
-> 29
f = open("/tmp/foo1.txt", "w")
value = ('www.huawei.com', 14)
s = str(value)
f.write(s)
f.close()
$ cat /tmp/foo1.txt
('www.huawei.com', 14)
f.tell()
返回 文件指针当前所处的位置 ,它是从文件开头开始算起的字节数
f = open("/tmp/foo1.tx", "r")
f.readline()
num = f.tell()
print(num)
f.close()
-> 30
f.seek(offset, from_what)
改变 文件指针当前的 位置
序号 |
位置 |
from_what |
01 |
开头 |
0 |
02 |
当前 |
1 |
03 |
结尾 |
2 |
序号 |
函数 |
描述 |
01 |
f.seek(x, 0) |
表示从文件 首行首字符 往后移动 x 个字符 |
02 |
f.seek(x, 1) |
表示从 当前位置 往后移动 x 个字符 |
03 |
f.seek(x, 2) |
表示从文件 结尾 往前移动 x 个字符 |
>>> f = open('/tmp/foo.txt', 'rb+')
>>> f.write(b'0123456789abcdef')
16
>>> f.seek(5)
5
>>> f.read(1)
b'5'
>>> f.seek(-3, 2)
13
>>> f.read(1)
b'd'
f.close()
关闭 文件并 释放 系统的资源,如果尝试再调用该文件,则会 抛出异常
>>> f.close()
>>> f.read()
Traceback (most recent call last):
File "", line 1, in ?
ValueError: I/O operation on closed file
>>> with open('/tmp/foo.txt', 'r') as f:
... read_data = f.read()
>>> f.closed
True
六、pickle 模块
- 通过 序列化 操作,能够将程序中运行的对象 信息保存到文件中去 ,永久存储
- 通过 反序列化 操作,能够从文件中 创建上一次程序保存的对象
pickle.dump(obj, file, protocol)
x = pickle.load(file)
import pickle
data1 = {'a': [1, 2.0, 3, 4+6j],
'b': ('string', u'Unicode string'),
'c': None}
selfref_list = [1, 2, 3]
selfref_list.append(selfref_list)
output = open('data.pkl', 'wb')
pickle.dump(data1, output)
pickle.dump(selfref_list, output, -1)
output.close()
import pprint, pickle
pkl_file = open('data.pkl', 'rb')
data1 = pickle.load(pkl_file)
pprint.pprint(data1)
data2 = pickle.load(pkl_file)
pprint.pprint(data2)
pkl_file.close()
import pickle
import os
datafile = 'person.data'
line = '======================================='
message = '''
=======================================
Welcome bookmark:
press 1 to show list
press 2 to add pepole
press 3 to edit pepole
press 4 to delete pepole
press 5 to search pepole
press 6 to show menu
press 0 to quit
=======================================
'''
print(message)
class Person(object):
"""通讯录联系人"""
def __init__(self, name, number):
self.name = name
self.number = number
def get_data(filename=datafile):
if os.path.exists(filename) and os.path.getsize(filename):
with open(filename, 'rb') as f:
return pickle.load(f)
return None
def set_data(name, number, filename=datafile):
personList = {} if get_data() == None else get_data()
with open(filename, 'wb') as f:
personList[name] = Person(name,number)
pickle.dump(personList, f)
def save_data(dictPerson, filename=datafile):
with open(filename,'wb') as f:
pickle.dump(dictPerson, f)
def show_all():
personList = get_data()
if personList:
for v in personList.values():
print(v.name, v.number)
print(line)
else:
print('not yet person,please add person')
print(line)
def add_person(name, number):
set_data(name, number)
print('success add person')
print(line)
def edit_person(name, number):
personList = get_data()
if personList:
personList[name] = Person(name, number)
save_data(personList)
print('success edit person')
print(line)
def delete_person(name):
personList = get_data()
if personList:
if name in personList:
del personList[name]
save_data(personList)
print('success delete person')
else:
print(name, ' is not exists in dict')
print(line)
def search_person(name):
personList = get_data()
if personList:
if name in personList.keys():
print(personList.get(name).name, personList.get(name).number)
else:
print('No this person of ', name)
print(line)
while True:
num = input('>>')
if num == '1':
print('show all personList:')
show_all()
elif num == '2':
print('add person:')
name = input('input name>>')
number = input('input number>>')
add_person(name,number)
elif num == '3':
print('edit person:')
name = input('input name>>')
number = input('input number>>')
edit_person(name,number)
elif num == '4':
print('delete person:')
name = input('input name>>')
delete_person(name)
elif num == '5':
print('search :')
name = input('input name>>')
search_person(name)
elif num == '6':
print(message)
elif num == '0':
break
else:
print('input error, please retry')