python 之 文件处理

文件操作分为读、写、 修改

文件操作-语法

# 1、f = open()方法
f = open('file_path', mode='', encoding='' )
f.read()
f.close()

# 2、with方法
with open('file_path', mode='', encoding='' ) as f :
    f.read()

文件操作-模式

“r” 读模式

“rb”二进制读取模式,数据读到内存里直接是betys格式

“r+”读写模式,写的新内容会添加在文件末尾

“a”追加模式

“w”写模式 ,如果原文件有内容,覆盖原内容

“wb”二进制写模式,不需要指定编码类型

文件操作-其他功能

image

fileno:返回文件句柄在内核中的索引值,网络编程用,是一个数字,整数

flush:在文件关闭之前,把写的内容从内存中强制刷新到硬盘

f = open('phone.txt', mode='r+', encoding='utf-8')
f.write('小明')
f.flush()

read:全部读取,从光标的位置开始

readline:只读一行

readlines:以

# 打开文件
f = open('phone.txt', mode='r', encoding='utf-8')
# readlines 会读取成为,一行为元素的列表
# data = f.readlines()
# readline 只会读取第一行,读取为字符串
data = f.readline()
# read 全部读取,读取成为字符串
# data = f.read()
f.close()
print(type(data))
print(data)
for line in data:
    print(line)
行为单位全部读取成一个列表


seek:设置光标的位置,长度按照字节计算

tell:查看光标的位置

readable:判断文件是否可读

seekable:判断是否可以seek

writeable:判断文件是否可写

truncate:必须是”读写模式“下,按照指定位置截断,从当前位置开始截断,加上参数,就是从头开始截断多少字节,

# truncate:必须是”读写模式“下,按照指定位置截断,从当前位置开始截断,
# 加上参数,就是从头开始截断多少字节
f = open('phone.txt', mode='r+', encoding='utf-8')
# 读取后光标会再文件末尾
data = f.read()
print(data)
# tell 返回光标位置
print(f.tell())
# seek 设置光标到文件开始
f.seek(0)
print(f.tell())
f.seek(12)
print(f.tell())
# 从光标位置处截断
f.truncate()
f.seek(0)
data1 = f.read()
print(data1)
len(data1)
# 设置参数,从光标开始,向前截留多少个字节
f.seek(6)
f.truncate(3)
f.seek(0)

data2 = f.read()
print(data2)
print(len(data2))


文件操作-修改

如果我的文件时“utf-8”编码把光标移到(seek)要修改的位置f.seek(8),那么这时写入(writer),你会发现文件有乱码,因为“utf-8”一个字符是3个字节,但是我们seek到第8个字节,这就像是就像一个字被压成了两半,另一半,电脑已经不认识了它是不可能往后移的,因为之前的内容的内存已经固定了,是硬盘的存储原理导致的,无法改变。

两种修改方式:
   

**占硬盘解决方案**

打开一个旧文件,打开一个新文件,循环读到的数据,修改指定内容之后写到新文件里
     文件改名,重命名 import os
             os.rename(f_new_name,f_name),完成修改!windows用os.replace覆盖原文件
    

**占内存方案**

打开文件,先全读到内存f.read()
             seek到开头

truncate截掉
修改数据

写入文件         

字符串的str.replace(old,new)与 文件操作os.replace(new,old) 的区别





posted @ 2018-05-24 14:17  游小刀  阅读(142)  评论(0编辑  收藏  举报
levels of contents