对磁盘文件的操作(文件处理)

File  = open(‘文件名’‘r‘,encoding = ‘utf-8’)     文件有r w a 模式 分别是读 写 追加

Data = File.read()  读取如果读取了一次之后 ,就会跳转到最后一个字符串内容,所以可以使用file.seek(0) 跳转到字符串第一个字的位置,重新read即可

File.close()    关闭文件

File.write()   向文件里写内容,如果有这个文件内容全部覆盖,如果没有,就建立这个文件。

File.seek() 调整光标到那个字符   

File.tell()  返回光标所在的位置 ## tell和seek都是按字节来查找和跳转的(gbk两者字节占一个字符,utf8 三个字节占一个字符)  read是按字符

File.truncate()   截断光标之后的字符串

File.trunacet(6)  从第六个字节往后截断

File.flush()   强制将内存中数据刷新到磁盘中

Eval()     使字符串变成对应的数据类型  

Str()  使字典、列表、元祖、集合等数据类型的值转换成字符串类型
file = open('data','rb')   # 加一个b 是使用二进制模式来读,人不可读,可用来网络传输

假如你不知道你要处理的文件是什么 编码可怎么办呢?

导入chardet包   --chardet包python默认是没有的 需要使用pip install chardet 如果没有pip 命令自行安装,如果安装pip 命令时,出现了setuptool报错,则先安装pip命令

>>> chardet.detect(data.read())

{'encoding': None, 'confidence': 0.0, 'language': None}

可以读出来的编码是个大概的判断,可以根据判断来试验编码,然后通过decode解码解相应的编码看是否能正常显示

文件比较小的话可以使用正常的read来读  但是如果文件特别大,为了节省内存,我们要使用边写边读的方法,循环方法

File = open(‘data‘,’r’)

For line in file:

Print(line)

File.close()

追加

file = open('data1','a')
file.write('zhangjian is handsome,ccn is beatiful ')
file.close()

读写混合模式

r+ 读写模式   -- 写读模式不会将文件内容覆盖   先读后写,以读的模式打开

w+ 写读模式   -- 读写模式会将文件内容覆盖   先写后读,以创建的模式打开

修改文件内容

# -*- coding:utf-8 -*-

import os


file_name = "data1"
file_new_name = "%s.new"%file_name

old_str = 'is'
new_str = 'and'

f = open(file_name,'r')
f_new = open(file_new_name,'w')

for line in f:
    print(type(line))
    if old_str in line:
        line = line.replace(old_str,new_str)
    f_new.write(line)

# f.flush()
# f_new.flush()
f.close()
f_new.close()

os.rename(file_new_name,file_name)

  

# -*- coding:utf-8 -*-

file_name = 'data1'

old_str = "wu"
new_str = "su wu kong"

#lista = []
f = open(file_name,'r+')
data = f.read()
f.seek(0)
f.truncate()

for line in data:
    if old_str in data:
        line = line.replace(old_str,new_str)

    f.write(line)
f.close()

  

原文地址:https://www.cnblogs.com/zjaiccn/p/12909589.html