python 输入 / 输出
1)输出方式:
1, 表达式语句
2,print()函数
3, 文件对象的 write()(标准输出文件可以用 sys.stdout 引用)
2)输出格式:
1,str.format(): 格式化输出值
a, 括号及其里面的字符 (称作格式化字段) 将会被 format() 中的参数替换:
- eg:>>> print('{}先森: {}!'.format('yangrongkuan', '就读于华师'))
- # 输出: yangrongkuan 先森: 就读于华师!
b, 在括号中的数字用于指向传入对象在 format()中的位置:
- eg:>>> print('{0} 和 {1}'.format('yang', 'rong'))# 输出: yang 和 rong
- >>> print('{1} 和 {0}'.format('rong', 'kuan'))# 输出: kuan 和 rong
c, 如果在 format() 中使用了关键字参数, 那么它们的值会指向使用该名字的参数:
- eg:>>> print('{name}大哥:{role}'.format(name='杨', role='is a student'))
- # 输出: 杨大哥: is a student
d, 位置和关键字参数可以任意组合:
- eg:>>> print('学生序列 {0}, {1}, and {a}.'.format('yang', 'rong', a='kuan'))
- # 输出: 学生列表 yang,rong,and kuan
e, 可选项':'和格式标识符可以跟着字段名. 如: 将 Pi 保留到小数点后三位:
- eg:>>> import math
- >>> print('常量 PI 的值近似为 {0:.3f}.'.format(math.pi))# 输出: 3.142
f, 在':'后传入一个整数, 可以保证该域至少有这么多的宽度. 如:
- eg:>>> student = {
- 'yangrongkuan': 1
- }
- >>> for name, number in table.items():
- ... print('{0:20} ==> {1:10d}'.format(name, number))# 保证输出 ==>前后的宽度
g, 处理很长的格式化字符串, 但不想将它们分开, 可通过变量名完成: 传入字典, 然后使用'[]'来访问键值.
- eg:>>> table = {
- 'yang': 1, 'rong': 2, 'kuan': 3
- }
- >>> print('kuan: {0[kuan]:d}; yang: {0[yang]:d}; rong: {0[rong]:d}'.format(table))
- # 输出: kuan: 3;yang: 1;rong: 2
2,repr()和 str()可以将输出的值转换成字符串.
区别: repr()可以产生一个解析器易读的表达形式; str()返回一个用户易读的表达形式.
3,str.rjust(): 可以将字符串靠右, 并在左边填充空格.(ljust, 向左对其, 在右边补空格; center, 让字符串居中, 在左右补空格)
4,str.zfill(width):width 指定字符串的长度(包括符号, 如小数点, 负号等). 原字符串右对齐, 会在数字的左边填充 0 直至到指定 width 大小, 如果原字符串长度已经大于或者等于 width 的值, 则不作任何操作.
- eg:>>> '12'.zfill(5) #输出:'00012'
- >>> '-3.14'.zfill(7) #输出:-003.14
- >>> '3.14159265359'.zfill(5) #输出: 3.14159265359
5, 旧式字符串格式化:'%': 将左边的参数格式化字符串, 而将右边的代入, 然后返回格式化后的字符串:
- eg:>>> import math
- >>> print('常量 PI 的值近似为:%5.3f.' % math.pi)# 输出: 常量 PI 的值近似为: 3.142.
3)读取键盘输入: input(): 从标准输入中读入一行文本, 默认标准输入是键盘. 另外也可以接收一个 python 表达式作为输入, 并将结果输出.
- eg:>>>str = input("请输入:");
- >>>print ("你输入的内容是:", str)
输出:
请输入: yangrongkuan
你输出的内容是: yangrongkuan
4)读写文件
1, 语法: open(filename,mode):open()将会返回一个 file 对象: filename 表示你要访问的文件名称的字符串值; mode 表示打开文件的模式.
附: mode 参数是非强制的. 打开文件的模式:('+': 追加;'b': 以二进制格式打开文件)
r: 以只读方式打开文件. 文件的指针将会放在文件的开头. 这是默认模式.
rb: 以二进制格式打开一个文件用于只读. 文件指针将会放在文件的开头.
r+: 打开一个文件用于读写. 文件指针将会放在文件的开头.((rb+: 以二进制格式打开))
w: 打开一个文件只用于写入. 如果该文件已存在则打开文件, 并从开头开始编辑, 即原有内容会被删除(所有的内容). 如果该文件不存在, 创建新文件.(wb: 以二进制格式打开)
w+: 打开一个文件用于读写. 若该文件已存在则打开文件, 并从开头开始编辑, 即原有内容会被删除(所有的内容). 如果该文件不存在, 创建新文件.(wb: 以二进制格式打开)
a: 打开一个文件用于追加. 如果该文件已存在, 文件指针将会放在文件的结尾. 也就是说, 新的内容将会被写入到已有内容之后. 如果该文件不存在, 创建新文件进行写入.(ab: 以二进制格式打开)
a+: 打开一个文件用于读写. 如果该文件已存在, 文件指针将会放在文件的结尾. 文件打开时会是追加模式. 如果该文件不存在, 创建新文件用于读写.(ab+: 以二进制格式打开)
实例:
- eg:
- # 打开一个文件
- f = open("D:/test.txt", "w")# 直接复制文件所在路径会出现'\','/'的问题, window 系统文件的路径是'\'
- f.write( "Python 是一个非常好的语言.\n 是的, 的确非常好!!\n" )
- # 关闭打开的文件
- f.close()
备注: 直接复制文件所在路径会出现'\','/'的问题, window 系统文件的路径是'\',python 用的也是'\'作为转义字符, 所以会导致解析器解析文件路径错误. 可以直接将'\'改为'/'即可, 或者在含有转义字符的字符串前加'r'表示字符串不作转义处理.
5)文件对象方法
1,f.read(size): 读取文件内容, size 是读取数据的数目, 若不带参, 则默认将文件的所有内容都读取并且返回.
2,f.readline(): 从文件中读取单独的一行. 换行符为 '\n'.f.readline() 如果返回一个空字符串, 说明已经已经读取到最后一行.
3.f.readlines(): 将返回该文件中包含的所有行. 如果设置可选参数 sizehint, 则读取指定长度的字节, 并且将这些字节按行分割.
或者以迭代访问的方式:
- f = open("D:/test.txt", "r")
- for line in f:
- print(line, end='')
- f.close()
4,f.write(string) 将 string 写入到文件中, 然后返回写入的字符数. 如果要写入一些不是字符串的东西, 要先进行转换:
- eg:
- f = open("D:/test.txt", "r")
- value = ('www.runoob.com', 14)
- s = str(value)
- f.write(s)
- f.close()
5,f.tell(): 返回文件对象当前所处的位置, 它是从文件开头开始算起的字节数.
6,f.seek(offset,from_what)函数: 改变文件当前的位置: from_what 的值, 如果是 0 表示开头, 如果是 1 表示当前位置, 2 表示文件的结尾.
seek(x,0): 从起始位置即文件首行首字符开始移动 x 个字符: 移动位数不包括自身位置起算:
seek(x,1): 表示从当前位置往后移动 x 个字符
seek(-x,2): 表示从文件的结尾往前移动 x 个字符: 移动位数包括自身位置起算:
如:(from_what 值为默认为 0, 即文件开头.)
- >>> f = open('D:/test.txt', 'rb+')
- >>> f.write(b'0123456789abcdef')#b 应该是指代二进制的意思, 不算在字符里面
- >>> f.seek(5) # 输出: 5
- >>> f.read(1) # 从当前的位置输出一个字符, 输出: b'5'
- >>> f.seek(-3, 2)# 移动到文件的倒数第三字节, 输出: 13
- >>> f.read(1) # 从当前的位置输出一个字符, 输出: b'd'
7,f.close(): 调用 f.close() 来关闭文件并释放系统的资源, 如果尝试再调用该文件, 则会抛出异常.
来源: http://www.bubuko.com/infodetail-3344307.html