zoukankan      html  css  js  c++  java
  • 对磁盘文件的操作(文件处理)

    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()
    

      

  • 相关阅读:
    基本命令
    Unicode Locale
    二进制查看编辑
    java reg
    java util
    js util
    跑到X
    [转]Linux AIO :libaio
    [转]c++ atomic操作
    [转] dpdk笔记
  • 原文地址:https://www.cnblogs.com/zjaiccn/p/12909589.html
Copyright © 2011-2022 走看看