python读取文件的方法的区别_Python文件读写w+和r+区别解析

Python文件读写w+和r+区别解析

其实r 是只读,只能读不能写,这是很明确的,但是r+是可读写,变成r+后还没太明白到底加了什么,还是照样写不了,有没有这样的体验呢,如下代码,只读时

f = open("test.txt", 'r', encoding="utf-8") # 文件句柄

f.write("we are heros\n")

data = f.read()

print(data, type(data))

f.close()

这样的话报错是明显的:io.UnsupportedOperation: not writable,不可写应都能理解,但是变成r+呢

f = open("test.txt", 'r+', encoding="utf-8") # 文件句柄

f.write("we are heros\n")

data = f.read()

print(data, type(data))

f.close()

你试过会发现,什么也没打印出来,同时注意!!!也没有报错。到底是什么意思呢?

其实是由于读写机制的问题,当一个文件被读或者写一次后,文件中类指针的东西指向的是整个文件的末尾,再次读时从末尾开始读的话肯定是什么都

读不到了,所以会出现这样的问题,和连续f.read()两次的话,第二次什么都不会读到的原因是相同的。那如何写完了接着读呢,见代码

f = open("test.txt", 'r+', encoding="utf-8") # 文件句柄

f.write("we are heros\n")

f.seek(0)

data = f.read()

print(data, type(data))

f.close()

加上f.seek(0)使得类指针的东西回到文件的开头然后从头开始读即可。配合f.tell()使用,英文及字符返回的是那个类指针的位置(也就是字符个数),但是中文的话是字符 个数*3,具体原因还得请大侠给讲讲。

r+与w+啥区别呢,不能简单的理解为读写都可,细节之处略有不同!

r+:先读后写的话是在原有文本后添加, 因为读完后类指针已经在最末尾了,如果是先写后读的话,是从头开始覆盖式写(如只修改了前面的字符,后面字符是不会被删掉的),类指针停留在写完的末尾,不是文档末尾,可以读出未被覆盖写的部分;

w+:为先写后读,先写完后使用f.seek(0)回到初始位置然后开始读,如果先读的话是读不出任何东西的,因为w+也是纯粹的覆盖写,在未使用写操作前文档是完全空白的,无论之前该文件里有什么。so ,只能先写后读。

r和w的区别,r必须已经存在这个文件了而 w时文件可以有也可以没有,if有被覆盖,else没有则创建一个(慎用),r+的写也是覆盖的!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间: 2020-03-26

1.python读写csv文件 import csv #读取csv文件内容方法1 csv_file = csv.reader(open('testdata.csv','r')) next(csv_file, None) #skip the headers for user in csv_file: print(user) #读取csv文件内容方法2 with open('testdata.csv', 'r') as csv_file: reader = csv.reader(csv_file)

blank.gif

本文实例讲述了Python打开文件.文件读写操作.with方式.文件常用函数.分享给大家供大家参考,具体如下: 打开文件: 在python3中,打开文件的函数是: open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True) 参数说明: file--文件名 mode-打开模式,默认只读模式 buffering--如果buffering的值被设为0,就不会有寄存.如果buff

字符串(sting)是 Python 中最常用的数据类型.我们可以使用引号('或")来创建字符.    特性: •python中单引号和双引号使用完全相同. •使用三引号('''或""")可以指定一个多行字符串. •转义符 '\' •反斜杠可以用来转义,使用r可以让反斜杠不发生转义.. 如 r"this is a line with \n" 则\n会显示,并不是换行. •按字面意义级联字符串,如"this " "is

Python3中configparser模块简介 configparser 是 Pyhton 标准库中用来解析配置文件的模块,并且内置方法和字典非常接近.Python2.x 中名为 ConfigParser,3.x 已更名小写,并加入了一些新功能. 配置文件的格式如下: [DEFAULT] ServerAliveInterval = 45 Compression = yes CompressionLevel = 9 ForwardX11 = yes [bitbucket.org] User =

背景 使用python操作一批同样分辨率的图片,合并为tiff格式的文件. 由于opencv主要用于读取单帧的tiff文件,对多帧的文件支持并不好. 通过搜索发现了两个比较有用的包:TiffCapture和tifffile.两者都可用pip安装. 其中前者主要用于读取tiff文件,后者可读可写.最终选择tifffile来合成tiff图片文件. 安装tifffile pip install tifffile 原理及代码 我的图片是8 bit灰度图. 每次读取之后,先升维: new_gray = g

一,docx模块 Python可以利用python-docx模块处理word文档,处理方式是面向对象的.也就是说python-docx模块会把word文档,文档中的段落.文本.字体等都看做对象,对对象进行处理就是对word文档的内容处理. 二,相关概念 如果需要读取word文档中的文字(一般来说,程序也只需要认识word文档中的文字信息),需要先了解python-docx模块的几个概念. 1,Document对象,表示一个word文档. 2,Paragraph对象,表示word文档中的一个段落

blank.gif

Python中几种常用包比较 2.用xlrd包读取Excel文件 引用包 import xlrd 打开文件 xlrd.open_workbook(r'/root/excel/chat.xls') 获取你要打开的sheet文件 # 获取所有sheet sheet_name = workbook.sheet_names()[0] # 根据sheet索引或者名称获取sheet内容 sheet = workbook.sheet_by_index(0) # sheet索引从0开始 获取指定单元格里面的值

打开文件用open,该函数创建一个文件对象,这将用来调用与之关联的其他支持方式. file object = open(file_name [, access_mode][, buffering]) 下面是参数的详细信息: file_name: file_name参数是一个字符串值,包含您要访问的文件的名称. access_mode: access_mode决定了文件必须被打开,即,读,写,追加等的可能值是下表中给定的一个完整的列表的模式.这是可选参数,默认文件存取方式为read (r). bu

今天写一个脚本文件,需要将多个文件中的内容汇总到一个txt文件中,由于多个文件有三种不同的编码方式,读写出现错误,先将解决方法记录如下: # -*- coding: utf-8 -*- import wave import pylab as pl import numpy as np import pandas as pd import os import time import datetime import arrow import chardet import sys reload(sys

本文实例总结了Python读写文件方法.分享给大家供大家参考.具体分析如下: 1.open 使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. file_object = open('thefile.txt') try: all_the_text = file_object.read( ) finally: file_object.close( ) 注:不能把open语句放在try块里,因为当打开文件出现异常时,文件对象f

1.open 使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. file_object = open('thefile.txt') try:      all_the_text = file_object.read( ) finally:      file_object.close( ) 注:不能把open语句放在try块里,因为当打开文件出现异常时,文件对象file_object无法执行close()方法. 2.读文

先来看一段创建文件并写入文本的代码,然后作介绍. #!/usr/bin/env python 'makeFile.py -- create a file' import os ls = os.linesep # get filename while True: fname = raw_input('Input an unused file name >') if os.path.exists(fname): print "ERROR: '%s' already exists" %

如下所示: # -*- coding:utf-8 -*- from datetime import datetime import re def Main(): sourcr_dir = '/data/u_lx_data/fudan/muying/muying_11yue_all.txt' target_dir = '/data/u_lx_data/fudan/muying/python/uid_regular_get.txt' uset = set() #去重 print("开始.....&q

如下所示: >>> f = open(r'E:\python\somefile.txt','w') 打开文件,写模式 >>> f.write('this\nis no \nhailu') 写入三行话 17 >>> f.close() >>> f = open(r'E:\python\somefile.txt','r') >>> f.read() 'this\nis no \nhailu' 查看一下 >>&

本文实例讲述了Python读写文件模式和文件对象方法.分享给大家供大家参考,具体如下: 一. 读写文件模式 利用open() 读写文件时,将会返回一个 file 对象,其基本语法格式如:  open ( filename, mode) 其中,filename变量是一个包含了你要访问的文件名称的字符串值.而mode决定了你打开文件的模式:只读,写入,追加等.所有可取值见如下的完全列表. 注:这个参数是非强制的,默认文件访问模式为只读模式(r) 例如,我们现在将一个字符串写入到test.txt文件中

Python读写文件模式 1.r 打开只读文件,该文件必须存在. 2.r+ 打开可读写的文件,该文件必须存在. 3.w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失.若文件不存在则建立该文件. 4.w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失.若文件不存在则建立该文件. 5.a 以附加的方式打开只写文件.若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留. 6.a+ 以附加方式打开可读写的文件.若文件不存在,则会

今天有个脚本需要遍历获取某指定文件夹下面的所有文件,我记得很早前也实现过文件遍历和目录遍历的功能,于是找来看一看,嘿,不看不知道,看了吓一跳,原来之前我竟然用了这么搓的实现. 先发出来看看: def getallfiles(dir): """遍历获取指定文件夹下面所有文件""" if os.path.isdir(dir): filelist = os.listdir(dir) for ret in filelist: filename = dir

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值