码迷,mamicode.com
首页 > 编程语言 > 详细

Python文件处理

时间:2018-08-10 01:23:59      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:必须   选择   while   用途   linux中   光标移动   直接   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\n)
f.write(22222222\n)
f.writelines([3333\n,44444\n])

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里面换行是\r\n;Linux中是\n

f =  open(new_file,wb)
f.write(bytes(111\n,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()一次读一行,注意每一行末尾都有一个回车\n

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文件处理

标签:必须   选择   while   用途   linux中   光标移动   直接   python   日志文件   

原文地址:https://www.cnblogs.com/zhangzixiang/p/9448320.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!