Python基础学习(七)I/O和文件

一、键盘读取

input()函数

使用input([prompt]),从键盘输入读取一行文本

二、输出

1、print()函数

前面介绍过,参考基础学习(一)

2、输出格式化

(1)str() 和repr() 可以将输出转换为字符串。repr() 可以输出转义字符和Python中的任何对象

(2)str.format() 可以格式化输出值

如下,输出一个平方与立方表:

for x in range(1, 11):
    print(repr(x).rjust(2), repr(x*x).rjust(3), end=' ')
    # 注意前一行 'end' 的使用
    print(repr(x*x*x).rjust(4))

或:

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

tips:

(1)rjust():它可以将字符串靠右, 并在左边填充空格。还有类似的方法, 如 ljust() 和 center()。 这些方法并不会写任何东西, 它们仅仅返回新的字符串。

(2) zfill():会在左边补0,如:'12.'zfill(5) = '0000012'

(3): 后跟一个整数,可保证该区域有这么长的宽度

(4){}中的数字代表参数位置,如{0}表示第一位参数。也可以用关键字参数表示,如:print('名字为:{name}'.format(name='小明')),输出:名字为:小明

(5)!a (使用 ascii()), !s (使用 str()) 和 !r (使用 repr()) 可以用于在格式化某个值之前对其进行转化。如:print('pi = {!a}'.format(math.pi)) ,输出:pi = 3.141592653589793

(6)也可以传入字典,使用[键名]访问键值 或者 **实现,如下:

table = {'Google': 1, 'Runoob': 2, 'Taobao': 3}
print('Runoob: {0[Runoob]:d}; Google: {0[Google]:d}; Taobao: {0[Taobao]:d}'.format(table))
print('Runoob: {Runoob:d}; Google: {Google:d}; Taobao: {Taobao:d}'.format(**table))

输出:

Runoob: 2; Google: 1; Taobao: 3
Runoob: 2; Google: 1; Taobao: 3

三、文件的读写

1、open() 函数

格式:文件对象.open(filename, mode)

filename表示文件名,mode表示模式。mode默认为只读,对于值如下:

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

2、write()函数

写文件

格式:文件对象.write('[文本]')

3、close() 函数

关闭文件

格式:文件对象.close()

如下例子,创建一个foo.txt文件,并写入内容。

# 打开一个文件
f = open("/tmp/foo.txt", "w")

f.write( "Python 是一个非常好的语言。\n是的,的确非常好!!\n" )

# 关闭打开的文件
f.close()

打开foo.txt文件,显示如下:

Python 是一个非常好的语言。
是的,的确非常好!!

四、文件对象的方法

1、read() 方法

读取文件内容

 格式:文件对象.read(size)

size是可选的,表示读取一定数目的数据,不指定或者为负数时代表读取整个文件。

# 打开一个文件
f = open("/tmp/foo.txt", "r")

str = f.read()
print(str)

# 关闭打开的文件
f.close()

输出:

Python 是一个非常好的语言。

是的,的确非常好!!

2、readline() 方法

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

格式:文件对象.readline()

# 打开一个文件
f = open("/tmp/foo.txt", "r")

str = f.readline()
print(str)

# 关闭打开的文件
f.close()

 输出:

Python 是一个非常好的语言。

3、 readlines() 

格式:文件对象.readlines(sizeint)

sizeint时可选得,不指定时返回整个文本信息(包括文件中的/n等符号也转换为文本输出)。指定时表示按指定字节长度输出。

# 打开一个文件
f = open("/tmp/foo.txt", "r")

str = f.readlines()
print(str)

# 关闭打开的文件
f.close()

输出:

['Python 是一个非常好的语言。\n', '是的,的确非常好!!\n']

4、使用文件迭代每行的方式读取整个文件

# 打开一个文件
f = open("/tmp/foo.txt", "r")

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

# 关闭打开的文件
f.close()

输出:

Python 是一个非常好的语言。
是的,的确非常好!!

5、tell()

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

6、 seek()

如果要改变文件当前的位置, 可以使用 f.seek(offset, from_what) 函数。

  • seek(x,0) : 从起始位置即文件首行首字符开始移动 x 个字符
  • seek(x,1) : 表示从当前位置往后移动x个字符
  • seek(-x,2):表示从文件的结尾往前移动x个字符

五、pickle模块

python的pickle模块实现了基本的数据序列和反序列化。

通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储。

通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。

基本接口:

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

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

x = pickle.load(file)

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

file: 类文件对象,有read()和readline()接口。

 创建文件,并序列化到内存中

import pickle

# 使用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 dictionary using protocol 0.
pickle.dump(data1, output)

# Pickle the list using the highest protocol available.
pickle.dump(selfref_list, output, -1)

output.close()

此时会在目录下生成 data.pkl 文件。

读取序列化文件并打印出来:

import pprint, pickle

#使用pickle模块从文件中重构python对象
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()

输出:

{'a': [1, 2.0, 3, (4+6j)], 'b': ('string', 'Unicode string'), 'c': None}
[1, 2, 3, <Recursion on list with id=2740122660672>]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值