一、输入输出
1.1 屏幕输出(以python2.7的print为例)
- 基础用法:
print "something"
。 - 打印多个字符:
print 'my','name','is','tyson'
,每个逗号会在屏幕输出时产生一个空格。也可以不使用逗号隔开直接连接多个字符串。 - 打印数值或表达式的结果:
print 100
、print 100*300
。 - 同时打印数值和字符串,必须用逗号连接:
print 'iam',21,'years old'
。 - 格式化输出:利用
%d
、%s
、%f
等占位符向指定的地方输出指定格式的内容。通过%
来传递参数,例如:
print ("my name is %s")%("tyson")
print "my name is %s"%"tyson"
name = "tyson"
age = 21
print "my name is %s,i am %d years old" % (name,age)
result:
my name is tyson
my name is tyson
my name is tyson,i am 21 years old
- 指定占位符宽度:通过
%nums
、%numd
、%numf
这种形式来指定相应参数的输出宽度。若以$0nums
这种形式则表示不够宽度的字符位用0来补充。若以%-10s
这种形式则表示右对齐。
1.2 键盘输入
- raw_input,会将任何类型的输入都转换成字符串类型。
test1 = raw_input("请输入字符串:")
test2 = raw_input("请输入整数:")
test3 = raw_input("请输入浮点数:")
test4 = raw_input("请输入元组:")
print '输入的字符串%s的转化过后的对象类型是%s'%(test1,type(test1))
print '输入的整数%s的转化过后的对象类型是%s'%(test2,type(test2))
print '输入的浮点数%s的转化过后的对象类型是%s'%(test3,type(test3))
print '输入的元组%s的转化过后的对象类型是%s'%(test4,type(test4))
result:
请输入字符串:test
请输入整数:21
请输入浮点数:2.1
请输入元组:(1,2)
输入的字符串test的转化过后的对象类型是<type 'str'>
输入的整数21的转化过后的对象类型是<type 'str'>
输入的浮点数2.1的转化过后的对象类型是<type 'str'>
输入的元组(1,2)的转化过后的对象类型是<type 'str'>
- input,会保留与屏幕输入一模一样的对象类型
#coding:utf-8
test1 = input("请输入字符串:")
test2 = input("请输入整数:")
test3 = input("请输入浮点数:")
test4 = input("请输入元组:")
print '输入的字符串%s的转化过后的对象类型是%s'%(test1,type(test1))
print '输入的整数%s的转化过后的对象类型是%s'%(test2,type(test2))
print '输入的浮点数%s的转化过后的对象类型是%s'%(test3,type(test3))
print '输入的元组%s的转化过后的对象类型是%s'%(test4,type(test4))
result:
请输入字符串:"string"
请输入整数:21
请输入浮点数:2.1
请输入元组:(1,2)
输入的字符串string的转化过后的对象类型是<type 'str'>
输入的整数21的转化过后的对象类型是<type 'int'>
输入的浮点数2.1的转化过后的对象类型是<type 'float'>
输入的元组(1,)的转化过后的对象类型是<type 'tuple'>
- 除此之外,input还可以接受键盘输入的表达式。
二、文件处理
2.1 文件打开
- 可以被读或写的文件分类:
- 文本文件:如html、doc、xls、ppt、txt
- 二进制文件:图片、视频
- 基本语法:
file_object=open(file_name,access_mode,buffering)
。 - file_name:包含需要打开的文件名的字符串,可以是相对路径或者绝对路径。
- access_mode打开模式:
- r:以读的方式打开
模式 | 特点 |
---|---|
r | 只读 |
r+ | 读写 |
rb | 只读二进制文件 |
rb+ | 读写二进制文件 |
- w:以写的方式打开,这里的写入都是覆盖式写入,而且能够在不存在对应文件名的文件的情况下创建文件。
模式 | 特点 |
---|---|
w | 以只写入形式打开 |
w+ | 以读写方式打开 |
wb | 以二进制方式写入打开文件 |
wb+ | 以二进制方式读写打开文件 |
- a:以追加的方式打开,也会在不存在对应文件名的文件时创建文件。
模式 | 特点 |
---|---|
a | 以只读方式打开 |
a+ | 以读写方式打开,文件指针放在原有内容的后面 |
ab | 以二进制方式打开文件文件内容,文件指针放在原有内容后面 |
ab+ | 以二进制方式读写文件内容,文件指针放在原有内容的后面 |
- buffering
- 0:不会有寄存
- 1:访问文件时会寄存行
- num(num>1):缓冲大小为num的寄存区
- num(num<0):缓冲大小为默认
2.2 文件关闭
- 文件打开后内容会寄存在内存中,需要关闭以节省内存空间。语法:
file_object=close()
。 - 通过以下形式打开,不需要用close方法关闭
with open(fila_name,access_mode) as fileobject:
do something
2.3 文件读取®的方法
- file.read():读取文件所有字节,可以指定需要读取的字节数
with open ("test.txt","r") as object:
print "使用read():\n",object.read()
result:
使用read():
line1
line2
line3
line4
还可以指定字节数
with open ("test.txt","r") as object:
print "使用read(4):\n",object.read(5)
print "使用read(4):\n",object.read(7)
result:
使用read(4):
line1
使用read(4):
line2
由上述例子也可以发现,每次读取,文件指针都是会移动的。而且类似于\n
这类转义字符也算作字节数中。
- file.readline():读取一行,包括
\n
字符。
with open ("test.txt","r") as object:
print "使用readline():\n",object.readline()
print "使用readline():\n", object.readline()
result:
使用readline():
line1
使用readline():
line2
- file.readlines():读取所有行,并返回列表。
with open ("test.txt","r") as object:
print "使用readlines():\n",object.readlines()
result:
使用readlines():
['line1\n', 'line2\n', 'line3\n', 'line4']
2.4 文件读写(a+、w+)的方法
以a+
方式打开并写入,内容是放在元内容之后,实例中为了方便演示,使用seek方法调整了文件指针的位置。
with open ("test.txt","a+") as object:
object.write("\n这是以a+方式打开文件并写入的内容\n")
object.seek(0)
print "使用read()读取全部文本信息:\n",object.read()
result:
使用read()读取全部文本信息:
line1
line2
line3
line4
这是以a+方式打开文件并写入的内容
with open ("testnew.txt","a+") as object:
object.write("\n这是以a+方式打开不存在的文件并写入的内容\n")
object.seek(0)
print "使用read()读取全部文本信息:\n",object.read()
result:
使用read()读取全部文本信息:
这是以a+方式打开不存在的文件并写入的内容
with open ("test.txt","w+") as object:
object.write("\n这是以w+方式打开文件并写入的内容\n")
object.seek(0)
print "使用read()读取全部文本信息:\n",object.read()
result:
使用read()读取全部文本信息:
这是以w+方式打开文件并写入的内容
2.5 文件偏移
通过open方法打开文件对象并进行相应的操作之后,文件指针会移动到执行完操作之后的字符的后面。通过tell方法来获取当前文件指针的位置,通过seek方法来移动文件指针的位置。
- file.tell():表示当前指针所在的位置。
with open ("test.txt","w+") as object:
print object.tell()
object.write("addline1\n")
print object.tell()
object.write("addline1\n")
print object.tell()
result:
0
10
20
- file.seek(offset,whence=0):offset是开始偏移量,表示需要移动指针的字节数。whence表示从哪个位置开始偏移,0表示从头开始移动指针,1表示从当前位置开始移动指针,2表示从末尾开始移动指针
with open ("test.txt","w+") as object:
print object.tell()
object.write("addline1\n")
print object.tell()
object.write("addline1\n")
print object.tell()
object.seek(-10,1)
print "从当前位置向左偏移10字节后的文件指针在",object.tell()
object.seek(5, 0)
print "从开头向右偏移10字节后的文件指针在", object.tell()
object.seek(10, 2)
print "从结尾向右偏移10字节后的文件指针在", object.tell()
result:
0
10
20
从当前位置向左偏移10字节后的文件指针在 10
从开头向右偏移10字节后的文件指针在 5
从结尾向右偏移10字节后的文件指针在 30
2.6 文件重命名
需要导入os模块,使用其中的rename方法。语法格式:os.rename('原文件名称','重命名文件名称')
。
例如:os.rename('testnew.txt','testold.txt')
2.7 文件删除
需要导入os模块,使用其中的rename方法。语法格式,例如:os.remove('testold.txt')
三、文件处理之os模块
3.1 获取当前目录
os.cwd():current work dir
[tyson@Tyson'sComputer learnOS]$ py
Python 2.7.15 (default, Jan 22 2019, 17:24:48)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.getcwd()
'/home/tyson/learnOS'
3.2 创建新的目录
os.mkdir(‘dirname’)
>>> os.mkdir('makebyPython')
>>> os.listdir()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: listdir() takes exactly 1 argument (0 given)
>>> os.listdir(os.getcwd())
['a.txt', 'b.txt', 'c', 'dir1', 'dir2', 'makebyPython']
3.3 删除指定目录
os.rmdir()
>>> os.listdir(os.getcwd())
['a.txt', 'b.txt', 'c', 'dir1', 'dir2', 'makebyPython']
>>> os.rmdir('makebyPython')
>>> os.listdir(os.getcwd())
['a.txt', 'b.txt', 'c', 'dir1', 'dir2']
3.4 列出指定目录下的文件和文件夹
os.listdir():返回的对象是列表
3.5 切换工作目录
os.chdir
>>> os.getcwd()
'/home/tyson/learnOS'
>>> os.chdir('dir1')
>>> os.getcwd()
'/home/tyson/learnOS/dir1'
四、文件处理之os.path模块
4.1 判断是否为文件
os.path.isfile()
>>> os.listdir(os.getcwd())
['a.txt', 'b.txt', 'c', 'dir1', 'dir2']
>>> os.path.isfile('xiajibada')
False
>>> os.path.isfile('a.txt')
True
>>> os.path.isfile('dir1')
False
4.2 判断是否为目录
os.path.isdir()
>>> os.listdir(os.getcwd())
['a.txt', 'b.txt', 'c', 'dir1', 'dir2']
>>> os.path.isdir('a.txt')
False
>>> os.path.isdir('dir1')
True
4.3 查看文件大小
os.path.getsize()
>>> os.path.getsize('a.txt')
0
>>> fileobject = open ("a.txt","w+")
>>> fileobject.write("i am tyson")
>>> fileobject.close()
>>> os.path.getsize('a.txt')
10