输出
将输出的值转成字符串,可以使用 repr() 或 str() 函数来实现。
- str(): 函数返回一个用户易读的表达形式。
- repr(): 产生一个解释器易读的表达形式。
>>> # repr() 函数可以转义字符串中的特殊字符
... hello = 'hello, runoob\n'
>>> hellos = repr(hello)
>>> print(hellos)
'hello, runoob\n'
>>> # repr() 的参数可以是 Python 的任何对象
... repr((x, y, ('Google', 'Runoob')))
"(32.5, 40000, ('Google', 'Runoob'))"
str.format()
>>> print('{}网址: "{}!"'.format('耿', 'GGG'))
耿GGG
>>> print('{0} 和 {1}'.format('Google', 'Baidu'))
Google 和 Baidu
>>> print('{name}网址: {site}'.format(name='百度', site='www.baidu.com'))
百度网址: www.baidu.com
# 位置及关键字参数可以任意的结合
>>> print('站点列表 {0}, {1}, 和 {other}。'.format('Google', 'Baidu', other='Taobao'))
站点列表 Google, Baidu, 和 Taobao。
格式化
- '!a' (使用 ascii()), '!s' (使用 str()) 和 '!r' (使用 repr()) 可以用于在格式化某个值之前对其进行转化
>>> import math
>>> print('常量 PI 的值近似为: {}。'.format(math.pi))
常量 PI 的值近似为: 3.141592653589793。
- 可选项 ':' 和格式标识符可以跟着字段名。 这就允许对值进行更好的格式化,在 ':' 后传入一个整数, 可以保证该域至少有这么多的宽度。
>>> import math
>>> print('PI = {0:.3f} e = {1:.6f}'.format(math.pi, math.e))
PI = 3.142 e = 2.718282
- 传入字典, 使用方括号 '[]' 来访问键值
>>> table1 = {"geng":123,"yi":456,"peng":789}
>>> table2 = {"geng":321,"yi":654,"peng":987}
>>> print("{0[geng]:d} {0[yi]:d} {1[peng]:d}".format(table1,table2))
123 456 987
写文件
f.write()
f.write(string) 将 string 写入到文件中, 然后返回写入的字符数。
#!/usr/bin/python3
# 打开一个文件
f = open("/tmp/foo1.txt", "w")
value = ('www.runoob.com', 14)
s = str(value)
f.write(s)
# 关闭打开的文件
f.close()
fo.writelines( seq )
用于向文件中写入一序列的字符串。
这一序列字符串可以是由迭代对象产生的,如一个字符串列表。
换行需要制定换行符 \n。
#!/usr/bin/python3
# 打开文件
fo = open("test.txt", "w")
print ("文件名为: ", fo.name)
seq = ["百度 \n", "腾讯 \n", "阿里 "]
fo.writelines( seq )
# 关闭文件
fo.close()
f.tell()
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个字符
遇到io.UnsupportedOperation: can't do nonzero cur-relative seeks,把open(filename, mode)中的mode改成“rb”即可
1:www.baidu.com
2:www.baidu.com
3:www.baidu.com
4:www.baidu.com
5:www.baidu.com
f = open("f.txt", "rb")
str = f.readline()
print(str,str.__len__(),sep = "\n")
print(f.tell())
f.seek(2,1)
print(f.read(1))
f.close()
b'1:www.baidu.com\r\n'
17
17
b'2'
tell()定位与seek()中的参数offset都是从0开始计数的。
输入
input()
Python提供了 input() 置函数从标准输入读入一行文本,默认的标准输入是键盘。
input 可以接收一个Python表达式作为输入,并将运算结果返回。
#!/usr/bin/python3
str = input("请输入:");
print ("你输入的内容是: ", str)
读文件
open() 将会返回一个 file 对象,基本语法格式如下:
open(filename, mode)
- filename:filename 变量是一个包含了你要访问的文件名称的字符串值。
- mode:mode决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。
模式 | 描述 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
w | 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
w+ | 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
模式 | r | r+ | w | w+ | a | a+ |
---|---|---|---|---|---|---|
读 | + | + | + | + | ||
写 | + | + | + | + | + | |
创建 | + | + | + | + | ||
覆盖 | + | + | ||||
指针在开始 | + | + | + | + | ||
指针在结尾 | + | + |
f.read()
为了读取一个文件的内容,调用 f.read(size), 这将读取一定数目的数据, 然后作为字符串或字节对象返回。
size 是一个可选的数字类型的参数。 当 size 被忽略了或者为负, 那么该文件的所有内容都将被读取并且返回。
遇到UnicodeDecodeError: 'gbk' codec can't decode byte 0xaf in ·······,设置编码:f = open("f.txt", "r", encoding='UTF-8')
#!/usr/bin/python3
# 打开一个文件
f = open("/tmp/foo.txt", "r")
str = f.read()
print(str)
# 关闭打开的文件
f.close()
f.readline()
f.readline() 会从文件中读取单独的一行。输出换行符为 '\n'。f.readline() 如果返回一个空字符串, 说明已经已经读取到最后一行。
如果设置可选参数 sizehint, 则读取单独一行的指定长度的字节。
f.readlines()
f.readlines() 将返回一个列表,列表的每个元素为文件的每一行(包含“\n”)的字符串。
如果设置可选参数 sizehint, 则读取指定长度的字节, 并且将这些字节按行分割。
f = open("f.txt", "r", encoding='UTF-8')
str = f.readlines(100)
print(str)
f.close()
['Python 3 教程\n', 'Python3 教程\n', 'Python3 基础语法\n', 'Python3 基本数据类型\n', 'Python3 解释器\n', 'Python3 注释\n', 'Python3 运算符\n', 'Python3 数字(Number)\n']
迭代读取
迭代一个文件对象然后读取每行:
#!/usr/bin/python3
# 打开一个文件
f = open("/tmp/foo.txt", "r")
for line in f:
print(line, end='')
# 关闭打开的文件
f.close()