精华内容
下载资源
问答
  • open() 函数 w+ 模式打开文件

    千次阅读 2019-01-11 10:21:00
    这种模式打开文件时,会先清空文件,然后才执行读写操作,当我们要执行读操作时,需要通过 seek() 方法将读取指针移到前面,才能读取...In [1]: data = open('1.txt', 'w+') # 读写模式打开文件 In [2]: data.r...

    这种模式打开文件时,会先清空文件,然后才执行读写操作,当我们要执行读操作时,需要通过 seek() 方法将读取指针移到前面,才能读取内容

    [root@localhost ~]$ cat 1.txt    # 文件内容如下
    aaa
    bbb
    ccc
    In [1]: data = open('1.txt', 'w+')   # 以读写模式打开文件
    
    In [2]: data.read()    # 如果我们执行读操作,是没有内容的,这种模式打开之前会先清空文件
    Out[2]: ''
    
    In [3]: data.write('abcd')    # 我们进行写操作,写操作是一直追加在文本末尾的
    
    In [4]: data.read()    # 读的时候也是读不到的,需要移动文件指针才能读取
    Out[4]: ''
    
    In [5]: data.seek(0)    # 把文件指针移到最前面
    
    In [6]: data.read()    # 再读取就有了
    Out[6]: 'abcd'

     

     

     

     

     

        

    转载于:https://www.cnblogs.com/pzk7788/p/10253797.html

    展开全文
  • 步 排除文件打开方式错误: r只读,r+读写,不创建 w新建只写,w+新建读写,二者都会将文件内容清零 (以w方式打开,不能读出。w+可读写) w+与r+区别: r+:可读可写,若文件不存在,报错;w+: 可读可写,...

     

    第一步 排除文件打开方式错误:

    r只读,r+读写,不创建

    w新建只写,w+新建读写,二者都会将文件内容清零

    (以w方式打开,不能读出。w+可读写)

    w+与r+区别:

    r+:可读可写,若文件不存在,报错;w+: 可读可写,若文件不存在,创建

    r+与a+区别:

    fd = open("1.txt",'w+')
    fd.write('123')
    fd = open("1.txt",'r+')
    fd.write('456')
    fd = open("1.txt",'a+')
    fd.write('789')

    结果:456789

    说明r+进行了覆盖写。

    以a,a+的方式打开文件,附加方式打开

    a附加写方式打开,不可读;a+: 附加读写方式打开)

    以 'U' 标志打开文件, 所有的行分割符通过 Python 的输入方法(例#如 read*() ),返回时都会被替换为换行符\n. ('rU' 模式也支持 'rb' 选项) . 

    r和U要求文件必须存在

    不可读的打开方式w和a

    若不存在会创建新文件的打开方式:a,a+,w,w+

    >>> fd=open(r'f:\mypython\test.py','w')	#只读方式打开,读取报错
    >>> fd.read()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    IOError: File not open for reading
    >>> fd=open(r'f:\mypython\test.py','a')#附加写方式打开,读取报错
    >>> fd.read()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    IOError: File not open for reading
    >>></span></span></span>

    r、rb、rt区别

    使用’r’一般情况下最常用的,但是在进行读取二进制文件时,可能会出现文档读取不全的现象;

    使用’rb’按照二进制位进行读取的,不会将读取的字节转换成字符,二进制文件用二进制读取用’rb’ ;

    rt模式下,python在读取文本时会自动把\r\n转换成\n,文本文件用二进制读取用‘rt’;

     

    2.正确读写方式打开,出现乱码

    >>> fd=open(r'f:\mypython\test.py','a+')
    >>> fd.write('123')
    >>> fd.read()
    >>> fd.close()
    

    close之前,手动打开文件,什么都没写入;close后,手动打开文件,乱码:123嚅?     

    原因分析:指针问题。open()以a+模式开启了一个附加读写模式的文件,由于是a,所以指针在文件末尾。此时如果做read(),则Python发现指针位置就是EOF,读取到空字符串。

    在写入123之后,指针的位置是4,仍然是文件尾,文件在内存中是123[EOF]

    但看起来read()的时候,Python仍然去试图在磁盘的文件上,将指针从文件头向后跳3,再去读取到EOF为止。

    也就是说,你实际上是跳过了该文件真正的EOF,为硬盘底层的数据做了一个dump,一直dump到了一个从前存盘文件的[EOF]为止。所以最后得到了一些根本不期待的随机乱字符,而不是编码问题造成的乱码。

    解决方案:读取之前将指针重置为文件头(如果读取之后重置再读,无效)

    >>> fd=open(r'f:\mypython\test.py','a+')
    >>> fd.seek(0)
    >>> fd.read()
    '123'<span style="white-space:pre">			</span>#顺利读出</span></span>

    3.文件里有内容,却读出空字符

    >>> fd=open(r'f:\mypython\test.py','w+') #清空内容,重新写入
    >>> fd.write('456')
    >>> fd.flush()<span style="white-space:pre">		</span>#确定写入,此时文件内容为“456”
    >>> fd.read()
    '' #读出空

    原因:同样是指针问题,写入后指针指向末尾[EOF],因此读出空

    解决方案一、调用close后重新打开,指针位于开头。(r,r+,a+,U都可以,注意不要用w,w+,a打开)

    >>> fd.close()
    >>> fd=open(r'f:\mypython\test.py','a+')
    >>> fd.read()
    '456'
    >>> fd.close()
    >>> fd=open(r'f:\mypython\test.py','r+')
    >>> fd.read()
    '456'<pre name="code" class="python">>>> fd.close()
    >>> fd=open(r'f:\mypython\test.py','r')
    >>> fd.read()
    '456'
    >>> fd.close()
    >>> fd=open(r'f:\mypython\test.py','U')
    >>> fd.read()
    '456'

    解决方案二、调用seek指向开头

    >>> fd=open(r'f:\mypython\test.py','w+')
    >>> fd.write('456')
    >>> fd.seek(0)
    >>> fd.read()
    '456'

    seek函数

    seek(offset[, whence]) ,offset是相对于某个位置的偏移量。位置由whence决定,默认whence=0,从开头起;whence=1,从当前位置算起;whence=2相对于文件末尾移动,通常offset取负值。

    4. 记得close()关闭

    当我们写文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再慢慢写入。只有调用close()方法时,操作系统才保证把没有写入的数据全部写入磁盘。忘记调用close()的后果是数据可能只写了一部分到磁盘,剩下的丢失了。所以,还是用with语句来得保险:

    with open('/Users/michael/test.txt', 'w') as f:
        f.write('Hello, world!')

    ----------

    看评论:对于'r+'来说,如果先读取了内容,再写入的话就变成了追加的模式,如果直接写入内容,就是覆盖了

    展开全文
  • 步 排除文件打开方式错误: r只读,r+读写,不创建 w新建只写,w+新建读写,二者都会将文件内容清零 (以w方式打开,不能读出。w+可读写) w+与r+区别: r+:可读可写,若文件不存在,报错;w+: 可读可写,若...
  • Open的第二个参数是一个字符串,想必大家都清楚,表示打开方式,主要就是读或者写: w方式打开, a:追加模式打开 (从 EOF 开始, 必要时创建新文件) r+:读写模式打开 w+:读写模式打开 (参见 w ) ...
     
    

    在python的文件操作中,Open是第一步。Open的第二个参数是一个字符串,想必大家都清楚,表示打开方式,主要就是读或者写:

    w:以写方式打开,
    a:以追加模式打开 (从 EOF 开始, 必要时创建新文件)
    r+:以读写模式打开
    w+:以读写模式打开 (参见 w )
    a+:以读写模式打开 (参见 a )
    rb:以二进制读模式打开
    wb:以二进制写模式打开 (参见 w )
    ab:以二进制追加模式打开 (参见 a )
    rb+:以二进制读写模式打开 (参见 r+ )
    wb+:以二进制读写模式打开 (参见 w+ )
    ab+:以二进制读写模式打开 (参见 a+ )


    以上是常用的参考资料。

    乍一看,w+和r+似乎是一样的,都是以读写模式打开。一般的时候,图省事,很多时候我们都随便用一个带‘’+‘’的打开。但是,在实际应用过程中,w+和r+其实大有不同。

    以我写的一个数据清洗的小程序为例:

    程序的功能是把从百度文库或者知网阅读器里复制出来的文字进行初步清洗,删除用各种编码打出来的多余空格和换行符,并全部替换为一个‘’

    #clean.py
    import re,os
    def clean(x):
        i=os.path.splitext(x)#抠文件路径
        x=open(x,'r+',encoding='utf-16')
        x=str(x.read())
        x=x.replace('\xa0',' ')
        x=x.replace('\n','')
        x=re.sub(' +',' ',x)
        y=open(i[0]+'_clean'+i[1],'w',1,encoding='utf-16')#【位置1】
        y.write(x)
        y.close()
        y=open(i[0]+'_clean'+i[1],'r+',1,encoding='utf-16')#【位置2】
        return y
    
    
    可以看到,在【位置1】和【位置2】处都需要一个参数。

    其中【位置1】处的用于创建一个新文件并写入清洗后的数据,新文件应该是不存在的。

    然而【位置2】则是用于打开刚才创建好的新文件并用于返回查看。

    有以下几种参数设置方式:

    【位置1】w/w+【位置2】r/r+

    程序运行正常,得到预期结果。

    【位置1】w/w+【位置2】w/w+

    程序运行正常,但结果是一段空白,新文件被创建了,但里面什么都没。

    【位置1】r/r+【位置2】随意

    错误:文件未找到(FileNotFound)


    通过总结以上规律,我们就可以知道其中的规律:

    ①:‘+’仅仅代表追加功能,其中模式的运行方式还是以'+'前的为主。

    ②:w模式拥有在文件不存在时便创建文件的能力,但是打开原本有内容的文件时,会默认文件为空文件并开始写入。而这时候如果什么都没有写,那文件就会被当做一个空文件打开(或者进一步的保存)。

    ③r模式不拥有自动创建新文件的能力,也就是必须打开已存在的文件,但是它是真正能够读取文件里面内容的方式。


    综上,‘+’仅仅是追加,我们在操作文件时,还是应该让w和r处在合适的位置上。

    展开全文
  • Python3 文件打开方式 w, w+, a, a+, r, r+ 对打开文件进行读写操作时需要注意当前光标所在位置,对常用的几种打开方式总结内容如下: 打开方式 操作 效果 w 写 指针起始位置在文件首位在open文件动作后...

    Python3 文件的打开方式 r, r+, w, w+, a, a+

    对打开的文件进行读写操作时需要注意当前光标所在位置,对常用的几种打开方式总结内容如下:

    打开方式操作效果
    r指针起始位置在文件首位
    从首位开始读出。
    r+
    指针起始位置在文件首位
    读: 从指针位置开始读出。
    写: 从指针位置开始写入,如果原文件存在内容,则会按字节大小覆盖相应位置的内容。
    写入时的注意事项: 如果是非汉字与汉字之间替换,则当非汉字字节数未达到文字字节数时,会导致乱码。
    w指针起始位置在文件首位
    在open文件动作后即清空文件内容,从首位通过代码写入新的内容。
    w+
    指针起始位置在文件首位
    读: 因为在open时文件已被清空,所以初始读出为空;每次写入后指针均在文件末尾,在不移动指针的情况下,读的动作输出为空
    写: 在open动作后即清空文件内容,从首位开始写入新的内容。
    a指针起始位置为文件末尾
    从指针起始位开始写入
    a+
    指针起始位置为文件末尾
    读: 从指针位置开始读出,在不移动指针的情况下读出的内容为空。
    写: 从指针位置开始写入。

    额外说明

    写的动作返回值是当前写入的字符数(不是字节数,一个汉字算一个字符)

    展开全文
  • 转载于 http://blog.csdn.net/ztf312/ 第步 排除文件打开方式错误:r只读,r+读写,不创建w新建只写,w+新建读写,二者都会将文件内容清零(以w方式打开,不能读出。w+可读写)w+与r+区别:r+:可读可写,若文件...
  • 正在进行的项目中有个日志存储模块,需要在设备端将日志数据写到存储介质——其实就是硬盘,就是一个文件。在我测试时,发现上位机读取到的日志数据不全,明明登陆到设备看有100多KB,但读到的日志才2行,肯定有问题...
  • python3 文件打开模式 + r+ a+

    千次阅读 2019-04-05 23:43:08
    文件打开模式 w+ r+ a+ 区别和辨析 w+ 打开文件并读写 1. 文件存在,则清空(也即写入空); 2. 文件不存在,则创建文件 ; 3. 文件流定位到开始位置, 所以read() 会得到空。 r+ 打开文件并读写 1. 文件存在,打开文件...
  • r只读,r+读写,不创建,即需要事先存在一个文件以供读/读写,若不存在文件会报错 w新建只写,w+新建读写,二者都会将文件内容清零,即事先不需要有该文件存在,若已经存在则会覆盖 (以w方式打开,不能读出。w+可...
  • python使用Notepad++同时打开个文件

    千次阅读 2019-01-16 09:44:43
    有两个文件夹,文件夹中的文件名称包含一个数字index,想打开一个文件夹中的第i个文件的同时也打开文件2中的第i个文件。每次取两个文件夹同时找到两个文件很麻烦。决定用程序来实现。 自然就想到了批处理。 第一步...
  • Python文件操作中的a,a+,ww+几种方式的区别

    万次阅读 多人点赞 2018-08-12 15:39:56
    步 排除文件打开方式错误: r只读,r+读写,不创建 w新建只写,w+新建读写,二者都会将文件内容清零 (以w方式打开,不能读出。w+可读写) w+与r+区别: r+:可读可写,若文件不存在,报错;w+: 可读可写,...
  • 步 排除文件打开方式错误: ...(以w方式打开,不能读出。w+可读写) **w+与r+区别: r+:可读可写,若文件不存在,报错;w+: 可读可写,若文件不存在,创建 r+与a+区别: [pyth...
  • Python读写文件r+和w+

    千次阅读 2018-05-15 18:19:36
    w+每次打开文件,都会清空之前的内容,若文件不存在,则会自动创建r+会在之前的基础上追加内容,但是不会创建文件所以两可以一起用,用之前判断一下文件是否存在,如下:...
  • 文件操作:r r+ w w+ a a+

    千次阅读 2018-04-02 20:16:25
    r 打开只读文件,该文件必须存在。r+ 打开可读写的文件,该文件必须...a 附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。a+ 附加...
  • 开发时,我们要经常去check log文件,我用notepad++打开这些log文件,有时notpad++打开个文件,看起来比较烦,我一般check完log就把文件给关掉,经常是文件关闭后又要打开再check文件... 后来我写bat文件,直接放在...
  • 文件打开模式 w+ r+ a+ 区别和辨析

    千次阅读 2017-09-24 20:13:58
    w打开文件并读写 1. 文件存在,则清空(也即写入空); 2. 文件不存在,则创建文件 ; 3. 文件流定位到开始位置, 所以read() 会得到空。 r+ 打开文件并读写 1. 文件存在,打开文件文件指针定位到文件开始位置; ...
  • access_mode:打开方式,r读,w写,a追加,r+ w+ a+ 都是读写方式打开,rb二进制读,wb二进制写,rb+ wb+ ab+二进制读写  buffering:默认值  二、对文件进行操作  将文件中的内容读入到一个字符串变量/列表中...
  • w只写的方式打开文本文件文件若存在则清空文件内容从文件头部开始写,若不存在则根据文件名创建新文件并只写打开;a:只写的方式打开文本文件文件若存在则从文件尾部追加的方式开始写,文件原来存在的...
  • 一.总结 a:附加写,不可读。 a+:附加读写。追加写。 r:只读,最常用。不创建,不存在会报错。...r只读,r+读写,不创建,即需要事先存在一个文件以供读/读写,若不存在文件会报错 w新建只写,w+新建读写,二者都
  • C语言文件 "w+"与"wb+"区别

    万次阅读 多人点赞 2018-04-08 11:26:41
    这是我今天碰到的问题,现在已经解决, 希望我的整理能够帮助到你们! w+以纯文本方式读写,而wb+是二进制方式进行读写。 mode说明: ...wb 只写方式打开或新建一个二进制文件,只允许写数据。 ...
  • 一般情况下对文件的基本操作步骤是:打开文件---->操作文件---->关闭文件文件的常用操作有r,r+,w,w+,a,a+ 接下来我将为大家一一讲解每操作 (1)r操作:(如果不写对文件的操作方式,默认情况下是r) 只能读,不...
  • python文件读写模式 r,r+,w,w+,a,a+ 简介

    千次阅读 2018-08-08 10:11:46
    文件不存在 是否覆盖 r 只能读 报错 - r+ 可读可写 报错 是 w 只能写 创建 是 w+  可读可写 创建   是 a  只能写 创建 否,追加写 a+ ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 583,600
精华内容 233,440
关键字:

以w+方式打开一个文件