I,m-Mr-wang

文件操作

#对文件操作流程
#1.打开文件,得到文件句柄并赋值给一个变量
#2.通过句柄对文件进行操作
#3.关闭文件

data=open('yesterday',encoding='utf-8').read()
print(data)
f=open('yesterday',encoding='utf-8')#文件句柄


data=f.read()
print(data)
data2=f.read()
print('----------------------------------------------data2-----------------%s-----------------------2'%data2)
#文件只读一遍就完了,等于光标移到了最后,再读就读不到东西了,想读将光标移回去就可以再读了
data=open('yesterday','r',encoding='utf-8').read()
f=open('yesterday',encoding='utf-8')
print(f.tell())#文件句柄的指针所在位置,即先看光标在哪。tell按字符计数。
print(f.read(5))
print(f.readline())
print(f.tell())
f.seek(0)#回到所设置位置,和tell配合用
print(f.readline())
'''
#---------------------------------------------------写------------------------------------------------------------
f=open('yesterday','w',encoding='utf-8')#文件句柄
f.write('我们的爱情到这刚刚好')#打开文件的模式‘r’:读模式;‘w’写模式,一次只能用一个。
# 'w'后内容被清空了,w模式的打开文件是创建一个文件,覆盖之前的了(创建了一个yesterday覆盖了之前的)‘a’append追加

f=open('yesterday2','w',encoding='utf-8')#文件句柄
f.write('我们的爱情到这刚刚好')
f.write('不多也不少还可以忘掉')
f.close()

f=open('yesterday','a',encoding='utf-8')#‘a’追加,append也不能读取文件
f.write('我们的爱情到这刚刚好\n')
f.write('不多也不少还可以忘掉')

#----------------------------------------------------多行读文件(低级方法)——————————————————————
f=open('yesterday','r',encoding='utf-8')
print(f.readline())#读一行,读多行用for循环
for i in range(5):
print(f.readline())

f=open('yesterday','r',encoding='utf-8')#f.readline只适合读取小文件
for line in f.readlines():#readlines,生成列表,每行作为一个元素,之后可以通过print(line)打印文件
print(line.strip())#默认打印有\n,用strip()可以去除
for index,line in enumerate(f.readlines()):#通过enumerate函数来有条件读取
print(line.strip())
if index==9:
print('-----------------------------分割线----------------------------------------------')
#--------------------------------------------------高效率(正常方法)------------------------------------------
f=open('yesterday','r',encoding='utf-8')
count=0
for line in f:#一行一行读,且内存里只保存一行,已经变成了迭代器
if count==9:#不是列表,无法用枚举enumerate,需要自己弄个计数器。
print('------------------------------------------------------分割线-----------------------------------')
count += 1
continue
print(line)
count+=1
'''
print(f.encoding)#当前编码
print(f.fileno())#返回文件句柄在内存中的编号,PYTHON不是自己读文件而是调用操作系统io去读取文件
print(f.flush())#实时刷新,因为存储有缓存机制,实时刷新可以使之立马刷到硬盘。
#flush的作用,比如进度条机制
import sys,time
for i in range(20):
sys.stdout.write('#')#标准输出
sys.stdout.flush()
time.sleep(0.1)

f=open('yesterday2','w',encoding='utf-8')#'r+'可读可追加;‘w+’写读;‘a+’追加读写;‘rb’二进制文件
print(f.truncate(10))#truncate() 方法用于截断文件并返回截断的字节长度,指定长度的话,就从文件的开头开始截断指定长度,其余内容删除;不指定长度的话,就从文件开头开始截断到当前位置,其余内容删除。
f=open('yesterday2','wb')#文件句柄,二进制文件,以二进制形式编码而不是0101
f.write('hellow binary\n'.encode())
f.close()

#--------------------------------------------------改-------------------------------------------------------
f=open(('yesterday2'),'r',encoding='utf-8')#改文件的方法就是用个修改新文件替换源文件
f_new=open('yesterday2.back','w',encoding='utf-8')
for line in f:
if'xxxxxxxxxx' in line:#找到需要更改的内容
line=line.repalce('BBBBBBBBBBBBBBBBBB','AAAAAAAAAAAAAAAAAAA')#替换
f_new.write(line)#写入新文件
f.close()
f_new.close()

#--------------------------------------------------with语句--------------------------------------------------------
with open('yesterday2.back','r',encoding='utf-8') as f:#with帮助自动关闭文件
for line in f:#...................
print(line)#..................

with open('log1') as obj1,open('log2') as obj2:#对多个文件的上下文进行管理
pass

posted on 2018-07-13 14:37  I,m-Mr-wang  阅读(182)  评论(0编辑  收藏  举报

导航