Python文件I/O
2015-11-16 21:34
661 查看
文件的创建
Python3中没有file()函数;文件的打开或创建可以使用函数open()函数;
文件的打开模式:
模式 | 描述 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
w | 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
w+ | 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
file()类用于文件管理;
属性 | 描述 |
---|---|
file.closed | 返回true如果文件已被关闭,否则返回false。 |
file.mode | 返回被打开文件的访问模式。 |
file.name | 返回文件的名称。 |
file.softspace | 如果用print输出后,必须跟一个空格符,则返回false。否则返回true。 |
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: break f.close() #以下也可以: f = open("love.txt") while(True): line = f.readline() if line: print(line) f.close() #输出结果: I Love You Baoxin My name is Xiaobai Xiaobai
''' 这样不可以: 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 You Baoxin My name is Xiaobai Xiaobai #3.一次性读取方式read() ''' 读取文件最简单的方法是使用read(),将从文件中一次性读出所有内容,并赋值给1个字符串变量 ''' f = open("love.txt") context = f.read() print(context) f.close() #输出: I Love You Baoxin My name is Xiaobai Xiaobai #通过控制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 Love 6 You B 13 #文件love.txt内容: I Love You Baoxin My name is Xiaobai Xiaobai
文件的写入
#writelines()方法可以把列表中存储的内容写入文件: f = open("hello.txt","w+") li = ["Hello world\n","Hello Baoxin\n"] f.writelines(li) f.close() #文件内容: Hello world Hello Baoxin ''' write(),writelines()在写入前会清除文件中原有的内容,再重新写入新的内容,相当于覆盖了; 如果要保留文件中原有的内容,只是追加新的内容,可以使用模式“a+”打开文件; ''' f = open("hello.txt","a+") new_context = "I love You" f.write(new_context) f.close() #文件内容: Hello world Hello Baoxin I love You #多次执行文件内容为: Hello world Hello Baoxin I love YouI love YouI love YouI love You #如果写入字符串非常多可以使用writelines();
文件的删除和复制
文件的删除需要使用os模块和os.path模块;os模块提供了对系统环境,文件,目录等操作系统级的接口函数;
os函数模块的open()函数与内建open()函数的用法不相同;
文件的删除需要调用remove()函数实现。删除之前要先判断文件是否存在,存在删除,否则不进行任何操作;
#文件的删除操作: import os file("hello.txt","w") #Python内置模块没有file属性,将file改为open if 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 shutil shutil.copyfile("hello.txt","hello3.txt") #把hello.txt的内容复制给hello3.txt shutil.move("hello.txt","../") #把hello.txt剪切到当前目录的父目录 shutil.move("hello3.txt","hello4.txt") #把hello3.txt移动到当前目录并改名hello4.txt #文件的重命名: ''' os模块的函数rename()可以对文件或目录进行重命名 ''' import os li = 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 os files = os.listdir(".") for filename in files: pos = filename.find(".") if filename[pos + 1:] == "html": newname = filename[:pos + 1] + "htm" os.rename(filename,newname) ''' #文件内容的搜索和替换: import re f1 = open("hello.txt","r") count = 0 for 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 os os.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 sys sys.stdin = open("hello.txt","r") for line in sys.stdin.readlines(): print(line) #2.stdout #流的标准输出; #前面的程序都是把程序运行后的结果输出到控制台 #这里通过stdout对象重定向输出,把输出结果保存到文件中; import sys sys.stdout = open(r"./hello.txt","a") #以追加模式打开当前目录下的文件hello.txt,并把hello.txt设置为终端输出设备,默认终端是控制台 print("goodbye") sys.stdout.close() #3.stderr #Pyhton的srderr对象用于记录输出异常信息,通过srderr对象可以实现日志文件的功能 import sys,time sts.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 + "异常信息"
相关文章推荐
- Python编写微信打飞机小游戏(八)
- Python Web部署方式总结
- python知识索引-数组、矩阵、字典、函数
- 【python】xml Elementtree 学习一
- python的变量传递
- python之路day4
- Python基本语法
- Python学习笔记009_构造与析构
- 使用Python代码处理Excel
- python 函数
- 每天一点python--assert断言
- python
- python 做爬虫
- Python的re(正则表达式)模块学习笔记
- Python学习记录-2
- python压缩文件目录和移动到指定文件夹
- 模型
- Python - SyntaxError: Non-ASCII character '\xe7' in file解决方法
- python获取服务器端的时间
- Python - Windows下安装easy_install, pip 及whl文件安装方法