zoukankan      html  css  js  c++  java
  • 文件处理--文件操作

    1、w 写模式,它是不能读的,如果用w模式打开一个已经存在的文件,会清空以前的文件内容,重新写
    # w+ 是读写内容,只要沾上w,肯定会清空原来的文件
    # 2、r 读模式,只能读,不能写,而且文件必须存在
    # r+ 是读写模式,只要沾上r,文件必须存在
    # 3、a 追加模式,也能写,在文件的末尾添加内容
    # 4、rb+、wb+、ab+,这种是二进制模式打开或者读取,一些音乐文件

    open("web.log",'rb+',encoding='utf-8')

    文件操作分为读、写、修改,我们先从读开始学习

    with open('/path/to/file', 'r') as f:   #Python引入了with语句来自动帮我们调用close()方法
    print(f.read())            #如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便:

    f = open(file='d:/工作日常/兼职白领学生空姐模特护士联系方式.txt',mode='r'encoding='utf-8')

    data = f.read()

    f.close()

    原码:

    f = open(file="D:/工作日常/兼职白领学生空姐模特护士联系方式.txt",mode="r",encoding ='gbk')
    data = f.read()
    print(data)
    f.close()

    mode="r"   -文本只读模式
    mode="rb"  - 二进制模式  #这种方法,是用来传输,不给人看的。

    智能检测编码的工具 chardet
    import chardet
    f = open('log',mode = 'rb')
    data = f.read()
    f.close()

    result = chardet.detect(open('log',mode='rb'),read())
    print(result)

    Python 模块chardet安装 setup.py
    1、到http://pypi.python.org/pypi/chardet#downloads下载chardet-2.1.1.tar.gz;解压到site-package文件夹,后怎么安装呢?
    2、解压后 把 chardet 目录 直接拷贝到 python安装目录下的 Lib/site-packages/  下,即可
    rb打开文件是指二进制模式,数据读到内存是直接是bytes格式,如果想看内容,还需要手动decode,因此在文件打开阶段,不需要指定编码。
    检测是什么编码的文件,(unicode 或 utf-8)
    import chardet
    f = open('目录',mode = 'rb')
    data = f.read()


    data.decode("gb2312")
    print(result)

    #一行一行循环读文件

    read 几种模式 文本模式的r 、rb、 二进制的模式。

    不带‘b ’的要写encoding ,带'b'的不需要写encoding.(是二进制)
    #写文件
    例:
    f = open("兼职.txt",'w',encoding='gbk')
    f.write("路飞学城!"encode('gbk'))
    f.close()
    f = open("兼职2.txt",'wb')
    f.write("原子二号".encode('gbk'))
    f.close()

    #写就只有w 和wb 两种模式

    #追加模式操作文件
    参数“a”追加模式(追加到最后)
    f = open("兼职2.txt",'a')
    f.write(" 肛娘 北京 167 55 13523230322".encode('gbk'))
    f.close()

    #混合操作文件
    'r+' 读写混合模式
    f = open("兼职白领学生空姐模特护士联系方式.txt",'r+',encoding='gbk')
    data = f.read()
    print("content",data)

    f.write(" newline 1哈哈")
    f.write(" newline 2哈哈")
    f.write(" newline 3哈哈")
    f.write(" newline 4哈哈")

    print("new content",f.read())

    #写读模式
    f = open("兼职白领学生空姐模特护士联系方式.txt",'w+',encoding='gbk')
    data = f.read()
    print("content",data)

    f.write(" newline 1哈哈")
    f.write(" newline 2哈哈")
    f.write(" newline 3哈哈")
    f.write(" newline 4哈哈")

    print("new content",f.read())

    之前写的会被覆盖,新写的会显示。基本用这上写读模式

    #文件操作做其它功能
    flush(self, *args, **kwargs): # real signature unknow把文件从内存buffer
    里强制刷新到硬盘

    readable(self, *args, **kwargs):#real signature unknown 判断是否可读

    readline(self, *args, **kwargs):#real signature unknown 只读一行,
    遇到 or 为止

    seek(self, *args, **kwargs):#real signature unknown
    把操作文件的光标移到指定位置
    *注意seek的长度是按字节算的,字符编码存每个字符所占的字节长度不一样。
    如“路飞学城”用gbk存是2个字节一个字,用utf-8就是3个字节,因此以gbk
    打开时,seek(4)就把光标切换到,但如果是utf8,seek(4)会导致,拿到了飞这个
    字的一部分字节,打印的话会报错,因为处理剩下的文本时发现
    seekable(self, *args, **kwargs):#real signature unknown
    判断文件是否可进行seek操作

    tell(self, *args, **kwargs)#real signature unknown
    判断文件是否可进行seek操作
    truncate(self, *args, **kwargs):#real signature unknown
    按指定长度截断文件
    *指定长度的话,就从文件开头开始截断指定长度,不指定长度的话,就从当前
    位置到文件尾部的内容全去掉。

    writable(self, *args, **kwargs):#real signature unknown
    判断文件是否可写

    tell seek 是按字节算的,read是按字符算的。

    seekable 二进制文件都可以seek

    #修改文件
    f = open("兼职白领学生空姐模特护士联系方式utf8.txt",'r+',encoding"utf-8")
    f.seek(6)
    f.write("[路飞学城]")
    f.close()
    #文件修改功能
    #例:文件修改占硬盘
    import os #导入工具箱
    f_name = "兼职白领学生空姐模特护士联系方式.txt"
    f_new_name = "%s.new"%f_name

    old_str = "乔亦菲"
    new_str = "肛娘"

    f = open(f_name,"r",encoding="utf-8")
    f_new = open(f_new_name,"w",encoding="utf-8")

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

    f_new.write(line)
    f.close()
    f_new.close()

    os.rename(f_new_name,f_name) #重命名


    #例:文件修改占内存
    f_name = "兼职白领学生空姐模特护士联系方式.txt"

    old_str = "肛娘"
    new_str = "乔亦菲"

    file_data = ""
    with open(f_name, "r", encoding="utf-8") as f:
    for line in f:
    if old_str in line:
    line = line.replace(old_str, new_str)
    file_data += line
    with open(f_name, "w", encoding="utf-8") as f:
    f.write(file_data) # for line in f:
    f.close()
     






  • 相关阅读:
    避免多次提交
    Django 10
    Django 08
    Django 07
    Django 06
    Django 05
    Django 04
    Django 03
    Django 02
    Django 01
  • 原文地址:https://www.cnblogs.com/anzhangjun/p/8377483.html
Copyright © 2011-2022 走看看