当前位置:   article > 正文

Python文件流_python 中的流

python 中的流
什么是流?(文件流/字节流/字符流)
流,简单来说就是建立在面向对象基础上的一种抽象的处理数据的工具。在流中,定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员是对流进行所有操作的,而不用关心流的另一头数据的真正流向。流不但可以处理文件,还可以处理动态内存、网络数据等多种数据形式。
 

打开和关闭文件

Python提供了必要的函数和方法进行默认情况下的文件基本操作----->file对象

open函数

先用Python内置的open()函数打开一个文件,创建一个file对象
语法:


file object = open(file_name [, access_mode][, buffering])


各个参数的细节如下:


file_name:file_name变量是一个包含了你要访问的文件名称的字符串值。
access_mode:access_mode决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。
buffering:如果buffering的值被设为0,就不会有寄存。如果buffering的值取1,访问文件时会寄存行。如果将buffering的值设为大于1的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。
不同模式打开文件的完全列表:
模式	描述
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。
首先打开一个文件查看其状态:
file=open('love.txt','a')
print('文件名:',file.name)
print('是否已关闭:',file.closed)
print('访问模式:',file.mode)

结果:

文件名: love.txt
是否已关闭: False
访问模式: a


进程已结束,退出代码0

Close()方法关闭打开的文件

file.close()
print(file.closed)

结果:

True


进程已结束,退出代码0

Write()方法可将任何字符串写入一个打开的文件。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字,

且不在字符串的结尾不添加换行符('\n'):

file.write('tell me where do i find ,some one like you girl.')

打开文件可以看到:


read()方法

read()方法从一个打开的文件中读取一个字符串。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。

在这里,被传递的参数是要从已打开文件中读取的字节计数。该方法从文件的开头开始读入,如果没有传入count,它会尝试尽可能多地读取更多的内容,很可能是直到文件的末尾。

file=open('love.txt','r+')
file.write('tell me where do i find ,some one like you girl.')
txt=file.read(10)
i=1
while(len(txt)>0):
    print('第'+str(i)+'次读取到的数据:', txt ,'当前位置:',file.tell())
    i=i+1
    if(i==10):
        file.seek(0,0)#参数1.设置偏移量 偏移几个字节 参数2. 0 1 2 开始 当前 结尾
    txt=file.read(5)

结果为:

第1次读取到的数据: tell me wh 当前位置: 58
第2次读取到的数据: ere d 当前位置: 63
第3次读取到的数据: o i f 当前位置: 68
第4次读取到的数据: ind , 当前位置: 73
第5次读取到的数据: some  当前位置: 78
第6次读取到的数据: one l 当前位置: 83
第7次读取到的数据: ike y 当前位置: 88
第8次读取到的数据: ou gi 当前位置: 93
第9次读取到的数据: rl. 当前位置: 96
第10次读取到的数据: tell  当前位置: 5
第11次读取到的数据: me wh 当前位置: 10
第12次读取到的数据: ere d 当前位置: 15
第13次读取到的数据: o i f 当前位置: 20
第14次读取到的数据: ind , 当前位置: 25
第15次读取到的数据: some  当前位置: 30
第16次读取到的数据: one l 当前位置: 35
第17次读取到的数据: ike y 当前位置: 40
第18次读取到的数据: ou gi 当前位置: 45
第19次读取到的数据: rl.te 当前位置: 50
第20次读取到的数据: ll me 当前位置: 55
第21次读取到的数据:  wher 当前位置: 60
第22次读取到的数据: e do  当前位置: 65
第23次读取到的数据: i fin 当前位置: 70
第24次读取到的数据: d ,so 当前位置: 75
第25次读取到的数据: me on 当前位置: 80
第26次读取到的数据: e lik 当前位置: 85
第27次读取到的数据: e you 当前位置: 90
第28次读取到的数据:  girl 当前位置: 95
第29次读取到的数据: . 当前位置: 96


进程已结束,退出代码0

重命名和删除文件

Python的os模块提供了帮你执行文件处理操作的方法,比如重命名和删除文件。我们可以导入这个模块然后调用相关的各种功能。

rename()方法:

rename()方法需要两个参数,当前的文件名和新文件名。

import os
os.rename('love.txt','lo.txt')
print('修改成功')

结果:

修改成功


进程已结束,退出代码0

remove()方法

可以用remove()方法删除文件,需要提供要删除的文件名作为参数。

os.remove('lo.txt')

mkdir()方法

可以使用os模块的mkdir()方法在当前目录下创建新的目录们。需要提供一个包含了要创建的目录名称的参数。

语法

os.mkdir('untitled')
成功创建新的目录

chdir()方法

可以用chdir()方法来改变当前的目录。chdir()方法需要的一个参数是你想设成当前目录的目录名称

os.chdir('./文件名')#点代表当前目录

rmdir()方法

rmdir()方法删除目录,目录名称以参数传递。在删除这个目录之前,它的所有内容应该先被清除。

os.rmdir('文件名')
*removedirs()方法

os.removedirs('/文件名')#当前空文件夹可删除 便尝试删除父级空文件夹 若可删除 便执行
读取一个网页源代码

from urllib import request
#请求打开一个url
response=request.urlopen('https://www.csdn.net/')
#在本地创建一个文件
xml=open(R'C:\Users\Administrator\PycharmProjects\untitled\lo.txt','w+',encoding='utf-8')
#把服务器的响应处理
html=response.read()
xml.write(str(html.decode('utf-8')))
print('读取完毕')

循环读一个文件并对其内容复制替换

foo=open(R'C:\Users\Administrator\PycharmProjects\untitled\lo.txt','r+',encoding='utf-8');
#循环读取 以行为单位
text=foo.readline()
while len(text)!=0:
    print(text,end=' ')
    text=foo.readline()
print(text)
fop=open(R'E:\新建文件夹\说明.txt','w+',encoding='utf-8')
lines=foo.readlines()
print(lines)
print(type(lines))
print(len(lines))
for li in lines:
    fop.write(li.replace('python','java'))
print('复制 替换')

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/927225
推荐阅读
相关标签
  

闽ICP备14008679号