python基础I/O编程之屏幕I/O和文件I/O

一、输入输出

1.1 屏幕输出(以python2.7的print为例)
  1. 基础用法:print "something"
  2. 打印多个字符:print 'my','name','is','tyson',每个逗号会在屏幕输出时产生一个空格。也可以不使用逗号隔开直接连接多个字符串。
  3. 打印数值或表达式的结果:print 100print 100*300
  4. 同时打印数值和字符串,必须用逗号连接:print 'iam',21,'years old'
  5. 格式化输出:利用%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
  1. 指定占位符宽度:通过%nums%numd%numf这种形式来指定相应参数的输出宽度。若以$0nums这种形式则表示不够宽度的字符位用0来补充。若以%-10s这种形式则表示右对齐。
1.2 键盘输入
  1. 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'>
  1. 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'>
  1. 除此之外,input还可以接受键盘输入的表达式。

二、文件处理

2.1 文件打开
  1. 可以被读或写的文件分类:
  • 文本文件:如html、doc、xls、ppt、txt
  • 二进制文件:图片、视频
  1. 基本语法:file_object=open(file_name,access_mode,buffering)
  2. file_name:包含需要打开的文件名的字符串,可以是相对路径或者绝对路径。
  3. access_mode打开模式:
  • r:以读的方式打开
模式特点
r只读
r+读写
rb只读二进制文件
rb+读写二进制文件
  • w:以写的方式打开,这里的写入都是覆盖式写入,而且能够在不存在对应文件名的文件的情况下创建文件。
模式特点
w以只写入形式打开
w+以读写方式打开
wb以二进制方式写入打开文件
wb+以二进制方式读写打开文件
  • a:以追加的方式打开,也会在不存在对应文件名的文件时创建文件。
模式特点
a以只读方式打开
a+以读写方式打开,文件指针放在原有内容的后面
ab以二进制方式打开文件文件内容,文件指针放在原有内容后面
ab+以二进制方式读写文件内容,文件指针放在原有内容的后面
  1. buffering
  • 0:不会有寄存
  • 1:访问文件时会寄存行
  • num(num>1):缓冲大小为num的寄存区
  • num(num<0):缓冲大小为默认
2.2 文件关闭
  1. 文件打开后内容会寄存在内存中,需要关闭以节省内存空间。语法:file_object=close()
  2. 通过以下形式打开,不需要用close方法关闭
with open(fila_name,access_mode) as fileobject:
	do something 
2.3 文件读取®的方法
  1. 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这类转义字符也算作字节数中。

  1. 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
  1. 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方法来移动文件指针的位置。

  1. 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
  1. 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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值