python 文件的读取

f=open("gongw",'r',encoding='utf-8')#打开原文件
f_new=open('gngwei1','w',encoding='utf-8')#创建打开一个新文件
for line in f:#遍历源文件
    if "--------------" in line:#条件
        line=line.replace("-","*")#替换
    f_new.write(line)#写入新文件
f.close()
f_new.close()
with open("gongwei",'r+',encoding='utf-8') as f :#with打开一个文件,用with打开文件就是可以不用写close关闭,运行完后自动关闭
    for line in f:
        print (line)
with open("gongwei",'r+',encoding='utf-8')as f,\
     open("gongwei1",'r+',encoding='utf-8') as f1:#同时打开多个文件
# 文件操作
# 1.打开文件,得到文件句柄并赋值给一个变量
# 2.通过句柄对文件进行操作
# 3.关闭文件
f=open('today','w',encoding='utf-8')#文件句柄(句柄就是在打开一个文件或者其他东西时候,会被分配一组数字)  打开一个文件,记住如果用的是'w'模式,如果原有文件内容会被删除,因为是新建的,把原来的覆盖了
f.write("中国\n")#字符编码用utf-8,是因为windows 默认是gbk 的编码方式,因此要指定编码方式
f.write("重庆\n")
f.close()

f=open('today','r',encoding='utf-8')
data=f.read()
data2=f.read()
print(data)
print('-'.center(50,'-'))
print(data2)#会发现值打印出了一次内容,为什么?因为从头开始读,到文件最后,这是第一次读文件。当第二次读文件,后面就没有了,所以就是空白,也就是说文件只能读一次。
f.close()
#注意如果使用r完成,再执行会空白,如果想再读写,那么需要用seek把光标放到前面

f=open('today','a',encoding='utf-8')#a=append追加的意思,这样就不会改变如果已经存在文件的内容了,注意这里只能写不能读
data=f.write("合川\na\nb\nc\nd\nf")
print(data)#打印的是写的内容的大小,只是上面那句代码写进的内容大小
f.close()
print("*".ljust(50,'*'))
f=open('today','r',encoding='utf-8')

for i in range(5):#打印前n行
    print(f.readline())
    print(i)
print(f.readlines())#相当于把文件变成一行列表,每个元素放在引号里
for line in f.readlines():
    print(line.strip())
# #如果想不打印第5行咋办?
for index,value in enumerate(f.readlines()):#enumerate能遍历index和值
    if index==4:
         continue
    print(value.strip())
#以上读取的方法有问题,因为如果文件过大,等待时间会很长,所以循环打印会等待

#优化
count=0
for i in f:#f变成了迭代器,一个一个迭代
    if count==4:
        print("----")
        count += 1
        continue
    print(i)


f=open("today",'r',encoding='utf-8')
print(f.tell())#光标最开始位置是0
print(f.readline())#打印一行
print(f.tell())#然后打印光标的位置
f.seek(0)#相当于把光标放在开始位置
print(f.tell())#位置又从0开始
print(f.readline())
print(f.encoding)#查看编码
print(f.fileno())#操作系统会有一个专门的接口读取文件,这返回的是操作系统管理这些功能的编号
print(f.seekable())#判断光标是否可以返回,如果可以,true
print(f.readable())#判断文件是否可读
f.flush()#意思如果open一个文件,用w模式,如果写了一行突然断电,可能会导致没有存入内存中,这个时候如果用flush()刷新,就会存到硬盘中取
f.close()
f=open("gongwei",'a',encoding='utf-8')
f.truncate(15)#从开始位置阶段15个字符
f.close()

f=open("gongwei1",'r+',encoding='utf-8')#读写,但是写是从最后开始写,追加写入
print(f.readline())
print(f.readline())
print(f.readline())
print(f.tell())
f.write("------------------------------")
print(f.tell())
f.close()

f=open("gongwei1",'w+',encoding='utf-8')#写读 这种模式,如下,当写入三行,再把光标放在开始位置写,以为会有4行,其实只有三行,因为最后写的把第一行覆盖了
f.write("-----------------\n")
f.write("-----------------\n")
f.write("-----------------\n")
f.seek(0)
print(f.tell())
f.write("********************\n")
f.close()
f=open("gongw",'w+',encoding='utf-8')#可以读,可以写,注意如果是写,和w+不一样,w+会覆盖,但是a+确实最后追加
f.write("-----------------\n")
f.write("-----------------\n")
f.write("-----------------\n")
f.seek(0)
print(f.tell())
f.write("********************\n")
f.close()

#对于二进制文件
f=open("gongwei",'rb')#读取二进制文件,如果文件是中文,会被以被编码的方式读取出来,如果文件是中文或数,前面有b代表二进制文件
print(f.read())
f.seek(0)
print(f.readline())
f.close()

f=open("gongwei",'wb')#如果写,必须encode()转码,才能实现
f.write("你好我好".encode())
f.close()

f=open("gongwei",'ab')#也可以用ab表示,追加
f.write("你好我好".encode())
f.close()

#注意也可以用rb+/wb+/ab+情况和没有b情况一样


代码运行如下:
中国
重庆

--------------------------------------------------

12
**************************************************
中国

0
重庆

1
合川

2
a

3
b

4
['c\n', 'd\n', 'f']
0
中国

8
0
中国

utf-8
4
True
True
********************

--------------

-----------------

57
87
0
0
b'\xe4\xbd\xa0\xe5\xa5\xbd\xe6\x88\x91\xe5\xa5\xbd\xe4\xbd\xa0'
b'\xe4\xbd\xa0\xe5\xa5\xbd\xe6\x88\x91\xe5\xa5\xbd\xe4\xbd\xa0'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值