Python文件处理

Posted zhangzixiang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python文件处理相关的知识,希望对你有一定的参考价值。

一、文件处理流程

f = open(file_management,‘r‘,encoding=utf-8) #默认就是只读模式
#文件句柄
data =f.read()
print(data)
f.close()

二、文件打开方式

w模式:文件不存在,新建文件;文件存在,直接覆盖;无论怎样都是直接新建一个空文档覆盖原文档

f = open(new_file,w,encoding=utf-8)
#文件句柄
print(f.writable())
#写入的内容必须是是字符串
f.write(11111111
)
f.write(22222222
)
f.writelines([3333
,44444
])

f.close()

a模式:追加模式

f = open(new_file,a,encoding=utf-8)

r+模式:可读可写(从光标处开始写)

f = open(new_file,r+,encoding=utf-8)

其他模式:

# r+  读写
# w+  写读
# x+  写读
# a+  写读
# “b”表示以字节方式操作,读取到的是字节,写入的也需要是字节
# rb=r+b
# wb=w+b
# xb=x+b
# ab=a+b
f = open(new_file,rb)
data = f.read()
print(data)
print(data.decode(utf-8))
f.close()

#windows里面换行是
;Linux中是


f =  open(new_file,wb)
f.write(bytes(111
,encoding=utf-8))
f.close()
#写入并覆盖

 

with 方式打开,无需关闭

with open(file,w) as f,        open(file_new,w,ending=utf-8):
    #文件操作

 

 三、操作文件的方法

文件无所谓的修改,本质上都是覆盖,修改的过程其实是先打开旧文件,读取内容后重新写入并覆盖

修改的本质:打开一个文件,一行一行地读入内存,读一行放到新文件里面,这个过程中可以修改,完毕后加载到新文件里面,覆盖原有文件

f = open(file_management,r,encoding=utf-8)
#文件句柄

print(f.readable())
print(-*80)
print(f.readline(),end = ‘‘)
print(f.readline(),end = ‘‘)
print(f.readline(),end = ‘‘)
print(-*80)
print(f.read())
f.close()

注意光标的移动,一旦read()也就是读取了全部内容,光标移动到最后

readline()一次读一行,注意每一行末尾都有一个回车

readlines()全部读出变成一个列表,一行是一个元素

四、文件操作的其他方法

1、f.closed   文件是否关闭

2、flush()刷进硬盘

3、tell()当前位置

4、seek( point )移动光标位置,point除了read是字符,其余处理时都是处理字节

new_file
1234567890
f = open(new_file,rb)  #要想使用第二种和第三种模式,必须用b方式,不指定encoding
print(f.tell())
f.seek(10)
print(f.tell())
f.seek(3)
print(f.tell())
f.seek(3,0)     #第一种模式,默认模式
print(f.tell())
f.seek(3,1)     #第二种模式,相对位置
print(f.tell())
f.seek(-3,2)    #第三种模式:从文件末尾倒着seek
print(f.tell())
print(f.read())
result:
0
10
3
3
6
7
b890

第三种方式的用途:日志文件的处理

#循环文件的方式
for i in f:
    print(i)

#耗费内存
for i in f.readlines():
    print(i)
new_file
2018/8/1  alex  做了一件什么事
2018/8/1  alex  做了一件什么事
2018/8/1  alex  做了一件什么事
2018/8/1  alex  做了一件什么事
2018/8/1  alex  做了一件什么事
2018/8/1  alex  做了一件什么事
2018/8/1  alex  做了一件什么事
2018/8/1  alex  做了一件什么事
2018/8/2  joey  做了一件什么事
offs = 10    #偏移量
while True:
    f.seek(-offs,2)
    data = f.readlines()
    if len(data)>1:
        print(文件的最后一行是%s %(data[-1].decode(utf-8)))
        break
    else:
        offs*=2

result:
文件的最后一行是2018/8/2  joey  做了一件什么事

5、read( num )读入num个字符

6、truncate( num )截取[0, num) (文件打开方式不能选择w+,以免一打开就把原文件清空

以上是关于Python文件处理的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 多处理进程中运行较慢的 OpenCV 代码片段

你如何在 python 中处理 graphql 查询和片段?

python+spark程序代码片段

我在哪里更改此 Python 代码片段以将临时文件保存在 tmp 文件夹中?

15种Python片段去优化你的数据科学管道

使用 Python 代码片段编写 LaTeX 文档