文件基本处理

时间:2022-12-20 12:45:56

1 打开文件,将文件句柄赋值给一个变量

2 拿句柄对文件进行操作

3 关闭文件

将一个文件第一行写道另外一个文件

f = open("test","r",encoding="utf-8") # open找的是系统的编码
x = f.readlines()
f.close()
f1 = open("test1","w",encoding="utf-8")
f1.write(x[0])
f1.close()

 

with open("test","r",encoding="utf-8") as f,\
        open("test1","w",encoding="utf-8") as f1:  #with open不用close()
    x = f.read()
    f1.write(x)

 

文件基本处理文件基本处理
北京182
iloveyoubeijing111
test
with open("test","rb") as f :#b的方式不能用encoding
    data= f.read()
    print(data)

 

文件基本处理文件基本处理
b'\xe5\x8c\x97\xe4\xba\xac182\r\niloveyoubeijing111\r\n'
result

\r\n代表回车,字母和数字可以直接显示,汉字用2进制代替,文件是utf-8格式,所以一个汉字三个字节

print(data.decode("utf-8"))

 

文件基本处理文件基本处理
北京182
iloveyoubeijing111
result

 

with open("test","wb") as f:
    x = "我爱北京*"
    f.write(bytes(x,encoding="utf-8"))
    #f.write(bytes(x.encode("utf-8")))#效果一样

 f.encoding表示的是文件打开的编码,如果不知道文件编码是什么,不知道怎么打开,可以用latin-1试一下

文件基本处理文件基本处理
我爱北京*我爱北京*
你好么
我很好
test
with open("test","r",encoding="utf-8") as f:
    print(f.readlines())  #windows上回车\r\n占2个字符。python默认处理显示成\n

with open("test","r",encoding="utf-8",newline="") as f:
    print(f.readlines())  #windows上回车\r\n占2个字符。python默认处理显示成\n

 

文件基本处理文件基本处理
['我爱北京*我爱北京*\n', '你好么\n', '我很好']
['我爱北京*我爱北京*\r\n', '你好么\r\n', '我很好']
Result

 

with open("test","r",encoding="utf-8") as f:
    f.readline()
    print(f.tell())  #光标位置处,即移动的字节处
    f.readline()
    print(f.tell()) 

 

文件基本处理文件基本处理
# 3*14+2=44
# 3*3+2+44=55
Result

 

f.seek(3)           #移动光标到第3个字节之后,
    print(f.tell())
    print(f.readline())  #如果移动的不是3的整数倍,会报错,因为utf-8无法解码

 

文件基本处理文件基本处理
3
爱北京*我爱北京*
Result

 

print(f.read(4))     #read读的是字符
f.truncate(5)        #截取0-5字节并保留,所以一定要是w模式 r+.a+,w可以,w+不行
print(f.readlines())

 seek(a,0)从头开始seek,seek(a,1)从当前光标seek,seek(a,2)从后向前seek,2的时候a需要是负数,文件打开模式需要带b

文件基本处理print last sentence of the file 文件基本处理
with open("test","rb") as f:
    offsets = -3
    n = 0
    while True:
        f.seek(offsets,2)
        data = f.readlines()
        if len(data)>1:                       #如果取到2行以上
            print("这是最后一行:" ,data[-1].decode("utf-8"))  #data列表里是二进制,需要解码
            break
        offsets*=2
文件基本处理文件基本处理
第一行
第二行
第三行
第四行
最后一行
test
文件基本处理文件基本处理
这是最后一行: 最后一行
result