一.python 访问文件
 
1.在python中要访问文件,首先要打开文件,也就是open
---open
  r:  只读
  w:  只写 ,文件已存在则清空,不存在则创建
  a:追加 ,写到文件末尾。如果文件存在,则在文件最后去追加。文件不存在就  
        去创建
  +-:更新(可读可写)
 
2.排除文件的错误打开方式
1》r, r+
r 只读
r+读写,不创建
 
r+:读写,不创建
with open(r'C:\Users\lzc\Desktop\234.txt','r+') as fd:
    fd.write('oooo\nmmmm\nppppp')
>>> 应用r+读写模式打开文件,函数fd.write()可以把内容写到文件中
 
 
2》w,w+
w新建只写,w+ 新建读写 : 二者都会将文件内容清零(以w打开方式,不能读出,w+可读写)
 
w:只写不可读,文件存在。当读取一个文件时报错
with open(r'C:\Users\lzc\Desktop\234.txt','w') as fd:
    fd.read()
 
>>> line 48, in <module>
    fd.read()
IOError: File not open for reading
 
 
w+:可读写,文件存在。但是会把原文件清零
with open(r'C:\Users\lzc\Desktop\234.txt','w+') as fd:
    fd.read()
>>> 应用w+ 打开文件,函数fd.read()可以读出文件内容,但是都会先清零,所以不会显示文件内容
 
 
3》w+ 与 r+ 区别:
r+: 可读可写,若文件不存在,报错
w+:可读可写,若文件不存在,创建
 
4》r+ 与 a+ 区别:
#r+ 与 a+ 区别
with open(r'C:\Users\lzc\Desktop\234.txt','w+') as fd:
    fd.write('1111111\n')
with open(r'C:\Users\lzc\Desktop\234.txt','r+') as fd:
    fd.write('222222\n')
with open(r'C:\Users\lzc\Desktop\234.txt','a+') as fd:
    fd.write('333333\n')
 
>>>  222222
     333333
说明,r+ 是覆盖写了。
 
 
4》不可读的打开方式:w和a
   若不存在会创建新文件的打开方式:a , a+ ,w, w+
 
#不可读的打开方式w和a
fd = open(r'C:\Users\lzc\Desktop\234.txt','w')
print fd.read()
>>> IOError: File not open for reading
 
fd = open(r'C:\Users\lzc\Desktop\234.txt','a')
print fd.read()
>>> IOError: File not open for reading
 
#以正确的方式打开,出现乱码 w+  a+
fd = open('9.txt','a+')
fd.write('vvvvv\nbbbbb\n')
fd.read()
fd.close()
 
>>>
 
原因分析:指针问题。open() 以a+ 模式开启了一个附件读写模式的文件,由于是a,所以指针在文件末尾。此时如果做read(),则python发现指针位置就是EOF,读取到空字符串。在写入“vvvvbbbb”之后,指针的位置是9,仍然是我呢见尾,文件在内存中是vvvvbbbb[EOF]。但看起来read()的时候,python仍然去试图在读磁盘上的文件。将指针从我文件头向后跳3,再去读取到EOF为止。也就是说,你实际上是跳过了该文件真正的EOF,为硬盘底层的数据做了一个dump,一直dump到了一个从前存盘文件的EOF为止。所以最后得到了一些根本不期待的随机乱字符,而不是编码问题造成的乱码。
 
解决方法:读取之前将指针重置为文件头(如果读取之后重置在读,无效。)
 
fd = open('9.txt','a+')
fd.seek(0)
# fd.read()
fd.write('vvvvv\nbbbbb\n')
fd.close()
 
>>>
 
# "w+" 清楚文件内容后再重新写入
fd = open('9.txt','w+')
fd.write('789')
fd.flush()
fd.read()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

python 基础 3.1 打开文件 a a+ r+ w+ 详解的更多相关文章

  1. python基础入门之对文件的操作

    **python**文件的操作1.打开文件 打开文件:open(file,mode='r') file:操作文件的路径加文件名 #绝对路径:从根目录开始的 #相对路径:从某个路径开始 mode:操作文 ...

  2. Python基础(七)——文件和异常

    1.1 读取整个文件 我们可以创建一个 test.txt 并写入一些内容,使用 Python 读文件操作,读出文本内容. with open(r'E:\test.txt') as file_objec ...

  3. 转:关于将Java编译过的.class文件打成jar可执行文件/JAR详解

    原文链接:关于将Java编译过的.class文件打成jar可执行文件/JAR详解 如何把 java 程序编译成 .exe 文件.通常回答只有两种,一种是制作一个可执行的 JAR 文件包,然后就可以像. ...

  4. C语言对文件的操作函数用法详解2

    fopen(打开文件) 相关函数 open,fclose 表头文件 #include<stdio.h> 定义函数 FILE * fopen(const char * path,const  ...

  5. C语言对文件的操作函数用法详解1

    在ANSIC中,对文件的操作分为两种方式,即: 流式文件操作 I/O文件操作 一.流式文件操作 这种方式的文件操作有一个重要的结构FILE,FILE在stdio.h中定义如下: typedef str ...

  6. WebService核心文件【server-config.wsdd】详解及调用示例

    WebService核心文件[server-config.wsdd]详解及调用示例 作者:Vashon 一.准备工作 导入需要的jar包: 二.配置web.xml 在web工程的web.xml中添加如 ...

  7. robots.txt文件配置和使用方法详解

    robots.txt文件,提起这个概念,可能不少站长还很陌生:什么是robots.txt文件?robots.txt文件有什么作用?如何配置robots.txt文件?如何正确使用robots.txt文件 ...

  8. js基础--浏览器标签页隐藏或显示状态 visibility详解

    欢迎访问我的个人博客:http://www.xiaolongwu.cn 前言 在工作中我们可能会遇到这样的需求,当浏览器切换到别的标签页或着最小化时,我们需要暂停页面上正在播放的视频或者音乐,这个需求 ...

  9. DOS文件转换成UNIX文件格式详解

    转:DOS文件转换成UNIX文件格式详解 由windows平台迁移到unix系统下容易引发的问题:Linux执行脚本却提示No such file or directory dos格式文件传输到uni ...

随机推荐

  1. C#byte怎么转成图片

    这个其实很简单我给大家提供一个方法吧 /// <summary> /// 字节数组生成图片 /// </summary> /// <param name="By ...

  2. HDU 1241.Oil Deposits-求连通块DFS or BFS

    Oil Deposits Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  3. Jsp2.0自定义标签(第一天)——一个简单的例子

    今天是学习自定义标签的第一天 Jsp2.0以来,自定义标签的实现比传统标签的实现容易了很多,一般只要extends类SimpleSupport重写doTag()方法即可. 先看最简单的例子,输出一个H ...

  4. iOS 汉字转拼音 PinYin4Objc

    PinYin4Objc 是一个效率很高的汉字转拼音类库,支持简体和繁体中文.有以下特性:1.效率高,使用数据缓存,第一次初始化以后,拼音数据存入文件缓存和内存缓存,后面转换效率大大提高:2.支持自定义 ...

  5. Mac环境下svn命令行的使用

    在Windows环境中,我们一般使用TortoiseSVN来搭建svn环境.在Mac环境下,由于Mac自带了svn的服务器端和客户端功能,所以我们可以在不装任何第三方软件的前提下使用svn功能,不过还 ...

  6. 查看网络port占用

    Linux和Mac下通用: 1.  利用 netstat 查看网络状态命令: netstat -an|grep port号 2. 利用list open file 命令打开文件(一切都是文件. 包含网 ...

  7. 在windows搭建jenkins測试环境

    jenkins 搭建好开发环境必备之中的一个,简单易用,搭建測试平台非常有帮助,不知道的都能够了解一下 官网下载地址 http://jenkins-ci.org/ 我是下载window版本号的 安装有 ...

  8. Scala 中Array,List,Tuple的差别

    尽管学了一段时间的Scala了,可是总认为基础不是太扎实,还有非常多的基础知识比較模糊.于是近期又打算又一次学习基础. Scala中的三种集合类型包含:Array,List,Tuple.那么究竟这三种 ...

  9. 安装htop教程及坑

    安装htop的坑:1.上官网http://hisham.hm/htop/releases/下载最新的包2.解压缩:tar -zxvf htop-2.0.2.tar.gz;3.进入目标文件夹: cd h ...

  10. Bag标签之校验

    校验输入的内容是不是正确(校验整数.小数.字母.汉字或日文.username.XML节点名.日期.邮件及自己定义) 使用方法: <Bagid=书包名 act=verify> <wen ...