Python文件I/O
来源:互联网 发布:工业企业分行业数据 编辑:程序博客网 时间:2024/05/01 10:38
文件的创建
Python3中没有file()函数;
文件的打开或创建可以使用函数open()函数;
文件的打开模式:
对于图片,视频等文件必须使用“b”的模式读写。
file()类用于文件管理;
文件的处理一般分为以下3个步骤:
1.创建并打开文件,使用file()函数返回1个file对象;
2.调用file对象的read(),write()等方法处理文件;
3.调用close()关闭文件,释放file对象占用的资源;
#open()函数的声明:open(file,mode='r',buffering=-1,encoding=None,errors=None,newline=None,closedf=True,opener=None) -->file object'''file是打开文件的名称,如果文件file不存在,open()将创建名为name的文件然后打开;mode是文件的打开模式;buffering设置缓存模式。0表示不缓存,1表示行缓冲;open返回file对象'''文件的创建,写入和关闭操作:context = "I Love You"f = open('love.txt','w') #打开文件f.write(context) #把字符串写入文件f.close() #关闭文件
write()写入直接在行后面添加,不会另起一行写入;
文件的操作
文件的读取
#1.按行读取方式 readline()'''readline()每次读取文件中的一行,需要使用永真表达式循环读取文件;当文件指针移动到文件的末尾时,依然使用readline()读取文件会出现错误,因此程序中需要添加1个判断文件指针是否移动到文件的尾部,并且通过该语句的中断循环'''f = open("love.txt")while(True): line = f.readline() if line: print(line) else: breakf.close()#以下也可以:f = open("love.txt")while(True): line = f.readline() if line: print(line)f.close()#输出结果:I Love YouBaoxinMy name is XiaobaiXiaobai
'''这样不可以:f = open("love.txt")while(True): line = f.readline() print(line)f.close()'''#2.多行读取方式 readlines()'''使用readlines()读取文件,需要通过循环访问readlines()返回列表中的元素;函数readlines()一次性读取文件中多行数据'''f = open('love.txt')lines = f.readlines() #把文件love.txt中所有内容存储在列表lines中for line in lines: print(line)f.close()#输出结果:I Love YouBaoxinMy name is XiaobaiXiaobai#3.一次性读取方式read()'''读取文件最简单的方法是使用read(),将从文件中一次性读出所有内容,并赋值给1个字符串变量'''f = open("love.txt")context = f.read()print(context)f.close()#输出:I Love YouBaoxinMy name is XiaobaiXiaobai#通过控制read()参数的值,返回指定字节的内容:f = open('love.txt')context = f.read(6) #读取前5个字节的内容print(context)print(f.tell()) #返回文件对象当前的指针位置context = f.read(6) #继续读取5个字节的内容print(context)print(f.tell()) #输出文件当前的指针位置f.close()#输出内容:I Love6 YouB13#文件love.txt内容:I Love YouBaoxinMy name is XiaobaiXiaobai
文件的写入
#writelines()方法可以把列表中存储的内容写入文件:f = open("hello.txt","w+")li = ["Hello world\n","Hello Baoxin\n"]f.writelines(li)f.close()#文件内容:Hello worldHello Baoxin'''write(),writelines()在写入前会清除文件中原有的内容,再重新写入新的内容,相当于覆盖了;如果要保留文件中原有的内容,只是追加新的内容,可以使用模式“a+”打开文件;'''f = open("hello.txt","a+")new_context = "I love You"f.write(new_context)f.close()#文件内容:Hello worldHello BaoxinI love You#多次执行文件内容为:Hello worldHello BaoxinI love YouI love YouI love YouI love You#如果写入字符串非常多可以使用writelines();
文件的删除和复制
文件的删除需要使用os模块和os.path模块;os模块提供了对系统环境,文件,目录等操作系统级的接口函数;
os函数模块的open()函数与内建open()函数的用法不相同;
文件的删除需要调用remove()函数实现。删除之前要先判断文件是否存在,存在删除,否则不进行任何操作;
#文件的删除操作:import osfile("hello.txt","w") #Python内置模块没有file属性,将file改为openif os.path.exists("hello.txt"): os.remove("hello.txt")#文件的复制:#file类并没有提供直接复制文件的方法,但是可以使用read(),write()方法:src = open("hello.txt","w")li = ["hello Baoxin\n","hello Xiaobai\n"]src.writelines(li)src.close()src = open("hello.txt","r")dst = open("hello2.txt","w")dst.write(src.read())src.close()dst.close()'''shutil模块:此模块是另一个文件目录的管理接口,提供了一些用于复制文件,目录的函数;copyfile()可以实现文件的复制,声明如下:copyfile(src,dst)src表示源文件的路径,src是字符串类型;dst是目标文件的路径,dst是字符串类型;把src指向的文件复制到dst文件中文件的剪切可以使用move()函数实现:move(src,dst,*,follow_symlinks=True)与copyfile()参数相同,移动一个人间或目录到指定位置,并且可以根据参数dst重命名移动后的文件'''import shutilshutil.copyfile("hello.txt","hello3.txt") #把hello.txt的内容复制给hello3.txtshutil.move("hello.txt","../") #把hello.txt剪切到当前目录的父目录shutil.move("hello3.txt","hello4.txt") #把hello3.txt移动到当前目录并改名hello4.txt#文件的重命名:'''os模块的函数rename()可以对文件或目录进行重命名'''import osli = os.listdir(".") #调用listdir()返回当前目录的文件列表,“.”表示当前目录print(li)if "hello.txt" in li: os.rename("hello.txt","Baoxin.txt")elif "hello4.txt" in li: os.rename("hello4.txt","Xiaobai.txt")#输出:['7_1.py', 'hello2.txt', 'hello4.txt', 'love.txt']'''可以不看~修改后缀名:import osfiles = os.listdir(".")for filename in files: pos = filename.find(".") if filename[pos + 1:] == "html": newname = filename[:pos + 1] + "htm" os.rename(filename,newname)'''#文件内容的搜索和替换:import ref1 = open("hello.txt","r")count = 0for s in f1.readlines(): li = re.findall("hello",s) #使用re模块的findall()函数查询变量s,把查到的结果存储到列表li中 if len(li) > 0: count = count + li.count("hello") #调用列表的count()方法,统计hello在列表里个个数print("找到" + str(count) + "个hello")f1.close()#替换:下面的代码把hello.txt中的hello全部替换为love,并把结果保存到文件hello2.txt中f1 = open("hello.txt","r")f2 = open("hello2.txt","w")for s in f1.readlines(): f2.write(s.replace("hello","love"))f1.close()f2.close()#文件的比较:'''Python提供了模块difflib实现对序列,文件的比较;如果要比较两个文件,可以使用difflib模块的SequenceMatcher类实现;其中get_opcodes()方法可以返回两个序列的比较结果;调用get_opcodes()前需要先生成1个SequenceMatcher对象,声明如下:class SequenceMatcher([isjunk[,a[,b]]])isjunk表示比较过程中是否匹配知道的字符或字符串,a,b表示待比较的两个序列;生成序列比较对象后调用该对象的get_opcodes()方法,将返回一个元祖~!@#¥%……&*()——'''
目录的常见操作
Python的os模块和os.path模块也提供了对目录操作的函数;
如果要一次性创建,删除多个目录,应使用函数makedirs()和removedirs();
mkdir()和rmdir()一次只能创建或删除一个目录;
import osos.mkdir("hello")os.rmdir("hello")os.makedirs("hello/world")os.removedies("hello/world")目录的遍历:'''os.walk()可以用于目录的遍历,声明如下:walk(top,topdown=True,onerror=None,followlinks=False)top表示需要遍历的目录树的路径;'''
文件和流
#1.stdin#对象stdin表示流的标准输入;#通过流对象读取文件hello.txt的内容如下:import syssys.stdin = open("hello.txt","r")for line in sys.stdin.readlines(): print(line)#2.stdout#流的标准输出;#前面的程序都是把程序运行后的结果输出到控制台#这里通过stdout对象重定向输出,把输出结果保存到文件中;import syssys.stdout = open(r"./hello.txt","a")#以追加模式打开当前目录下的文件hello.txt,并把hello.txt设置为终端输出设备,默认终端是控制台print("goodbye")sys.stdout.close()#3.stderr#Pyhton的srderr对象用于记录输出异常信息,通过srderr对象可以实现日志文件的功能import sys,timests.stderr = open("record.log","a")f = open(r"./hello.txt","r")t = time.strftime("%Y-%m-%d %X",time.localtime())context = f.read()if context: sys.stderr.write(t + " " + context)else: raise Exception, t + "异常信息"
0 0
- Python 文件I/O
- Python 文件I/O
- Python文件I/O
- Python 文件I/O
- Python文件I/O
- Python 文件I/O
- python文件I/O
- Python 文件I/O
- Python 文件I/O
- Python 文件I/O
- Python文件I/O
- Python 文件I/O
- Python 文件I/O
- Python菜鸟--文件I/O
- Python I/O文件操作
- python中的文件I/O
- Python 文件I/O 操作文件
- python学习六—文件I/O
- HTTP响应头信息和请求头信息详解
- Bootstrap边学边记
- 南大软院大神养成计划
- ACM常用模板——伸展树
- UI阶段的 Target/Action设计模式
- Python文件I/O
- 【黑马程序员】多线程
- mysql和oracle的语法上的差异
- poj1502
- 抽象工厂模式简单实例
- pyspark 【未完待续】
- 笔记八(圆周运动)
- Navicat for Mysql的操作使用
- swift 快速奔跑的兔几 本节的内容是:用AVAdioPlayer播放声音 语音合成