文件操作

1.文件操作流程:打开,操作,关闭:

f=open('文件1号','r',encoding='utf8')       #打开文件对象,命名为f(r代表读模式)
#print(f.read())                             #f.read()是读取文件全部内容

print(f.read(3))                            #读取前三个字符,读完后光标移动到下一字符
print(f.read(4))                           #读取4个字符(读取时默认每一行最后有一个换行符)

#f.close()                                  #关闭文件

#f=open('文件1号','w',encoding='utf8')      #w代表写模式
#f.write('hello 
' )
#f.write('萨瓦迪卡')                       #w模式下write写入时会将原来的内容格式化
#f.close()

#import time
#f=open('文件1号','a',encoding='utf8')      #a代表append模式
#f.write('
马勒戈巴子')                   #给文件增加新内容
#time.sleep(20)                            #在没有关闭文件的情况下,20s以后才会写进去

2.文件操作具体方法:

f=open('小重山','r',encoding='utf8')

#print(f.readline())                   #读取第一行,读完后指针指向下一行
#print(f.readline())                   #打印的是第二行。readline()自带换行符,print也自动换行,所以一共换了两行

#print(f.readlines())                  #f.readlines()读取的是包含所有行的一个列表,每个元素都带换行符

#for i in f.readlines():               #用for循环打印f.readlines()列表,打印时会自动识别换行符
#    print(i)

#for i in f.readlines():
#   print(i.strip())                   #strip的功能是去掉换行符

number=0
for i in f.readlines():
    number+=1
    if number==5:
        i=''.join([i.strip(),'奈何'])     #用join进行字符串拼接,给第5行加内容
    print(i.strip())

f=open('小重山','r',encoding='utf8')
for i in f:              #f.readlines()是将f对象读取为列表放入内存;而此处for循环以"迭代器"去读取,i指向谁,谁占内存
   print(i.strip())     #当下一个要进入内存时,上一个已经不占内存了,要比f.readlines()省内存,更优
f.close()

#对某一行操作:
f=open('小重山','r',encoding='utf8')
number=0
for i in f:
    number+=1
    if number==5:
        i=''.join([i.strip(),'奈何'])     #用join进行字符串拼接,给第5行加内容
    print(i.strip())
f.close()

f=open('小重山','r',encoding='utf8')
print(f.tell())         #识别光标的位置,起始位置是0
print(f.read(2))        #读两个字符
print(f.tell())          #一个汉字占三个字节,光标一次走一个字节,所以指到6
f.seek(3)                #调整光标位置,很重要
print(f.read(4))
f.close()

3.flush及其他模式

import time
f=open('文件2号','w',encoding='utf8')
f.write('apple ')
f.write('hello')
f.flush()           #flush实现写完后立即存入磁盘文件,如果没有flush,程序执行完后才会写入
time.sleep(3)
f.close()

import time
for i in range(30):
    print('*',end='')
    time.sleep(0.02)
print('
')

import time
for i in range(30):
    print('*',end='',flush=True)  #与上一段代码相比,flush实现了动态输出功能
    time.sleep(0.1)

f=open('文件2号','a',encoding='utf8')
f.truncate(3)                 #从第三个位置以后截断,只保留前面的内容

f=open('文件3号','r+',encoding='utf8')
print(f.read())                 #读写模式,可读可写,写在最后
f.write('你好')
f.close()

f=open('文件3号','w+',encoding='utf8')
f.write('abcdefg')           #写读模式,写前会格式化
f.seek(0)                    #写完后光标在最后,所以读不到内容,需要调整光标位置
print(f.readline())
f.close()

f=open('文件3号','a+',encoding='utf8')
f.write('water')
f.seek(0)            #添加完后光标在最后,所以读不到内容,需要调整光标位置
print(f.readline())
f.close()

4.文件修改

f_read=open('小重山','r',encoding='utf8')
f_write=open('小重山2','w',encoding='utf8')
number=0
for i in f_read:
    number+=1
    if number==5:
        i='hello 岳飞
'                  #完全替换
    elif number==6:
        i=''.join([i.strip(),'奈何
'])   #增加内容
    f_write.write(i)
f_read.close()
f_write.close()

5.with方法

with open('小重山''r') as f:     #等价于f=open('小重山','r'),退出with语句就关闭了文件,不需要close
    f.read()
print('jjj')

#with同时管理多个文件对象:
with open('文件1''r') as f1,open('文件2''w') as f2:
原文地址:https://www.cnblogs.com/Finance-IT-gao/p/10324815.html