一.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. windows下安装oracle,sqlplus连接启动oracle(oracle 主机字符串输入是什么)

    1.oracle安装 参考http://wenku.baidu.com/view/d01ffd43336c1eb91a375d68.html,这里不再赘述 2.命令行sqlplus连接oracle   ...

  2. AC日记——计算循环节长度 51nod 1035

    最长的循环节 思路: 我们尝试一种最简单的方法,模拟: 如何模拟呢? 每个数,对它模k取余,如果它的余数没有出现过,就补0继续模: 所以,当一个余数出现两次时,当前的长度即为循环节长度: 来,上代码: ...

  3. Network | CIDR

    无类别(现在) 无类别域间路由(Classless Inter-Domain Routing.CIDR)是一个用于给用户分配IP地址以及在互联网上有效地路由IP数据包的对IP地址进行归类的方法. CI ...

  4. ETL之Kettle

    Kettle是一款国外开源的ETL工具,纯java编写,可以在Window.Linux.Unix上运行. 说白了就是,很有必要去理解一般ETL工具必备的特性和功能,这样才更好的掌握Kettle的使用. ...

  5. Google开源基于Tensorflow的NLP框架重大升级

    http://weibo.com/ttarticle/p/show?id=2309404086117195475716

  6. #译# Core Data概述 (转)

    昨晚熬夜看发布会(本以为屌丝终于能买得起苹果了,谁知道...),因为看不了视频直播,所以就正好有空就把www.objc.io最新的一篇文章翻译了一下,同时感谢CocoaChina翻译组提供校对,以下为 ...

  7. 矩阵快速幂计算hdu1575

    矩阵快速幂计算和整数快速幂计算相同.在计算A^7时,7的二进制为111,从而A^7=A^(1+2+4)=A*A^2*A^4.而A^2可以由A*A得到,A^4可以由A^2*A^2得到.计算两个n阶方阵的 ...

  8. ArrayList和HashSet的比较

    ArrayList是数组存储的方式 HashSet存储会先进行HashCode值得比较(hashcode和equals方法),若相同就不会再存储 HashCode和HashSet类 Hashset就是 ...

  9. 【前端阅读】——《活用PHP、MySQL建构Web世界》摘记之高级应用

    一.高级应用 1.计数器 计数器的原理很简单,只有两步: 第一步就是读写一个数字,第二步就是显示出来.一般CGI'大多直接写到文件系统,当然也可以利用MySQL来存储这个数字,完成第一步的操作. 第二 ...

  10. 使用REST-Assured对API接口进行自动化测试

    转载:http://blog.csdn.net/u012050416/article/details/50674612 准备 目标 开始编码 总结   说明:本文只是一个getStart示例,关键在于 ...