Python3 输入和输出

输出

将输出的值转成字符串,可以使用 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()

猜你喜欢

转载自my.oschina.net/gain/blog/1790844
今日推荐