一.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. python c++ Visual Studio相关 Unable to find vcvarsall.bat问题

    使用Cython编译包的时候报错: Unable to find vcvarsall.bat 说明:https://jingyan.baidu.com/article/adc815138162e8f7 ...

  2. Swagger2接口注释参数使用数组

    allowMultiple = true, paramType = "query", dataType = "string" 输出的就是这样的:Array[st ...

  3. 深入浅出 Cocoa 之 Core Data(3)- 使用绑定

    深入浅出 Cocoa 之 Core Data(3)- 使用绑定 罗朝辉(http://blog.csdn.net/kesalin) CC 许可,转载请注明出处 前面讲解了 Core Data 的框架, ...

  4. iOS 5的文件存储策略应对

    苹果在iOS 5系统时,对app的文件存储提出了新的要求.从它的guildline来看,是推荐开发者尽量把app生成的文件放在Caches目录下的.原文如下: Only user-generated ...

  5. 【spring boot】8.spring boot的日志框架logback使用

    在继续上一篇的Debug调试之后,把spring boot的日志框架使用情况逐步蚕食. 参考:http://tengj.top/2017/04/05/springbo 开篇之前,贴上完整applica ...

  6. 【Java】List转化为数组

    List转化为数组的两种方式: 第一种: List<String> list = new ArrayList<>(); String [] arr = list.toArray ...

  7. 2016.7.12 针对不同的数据库类型generatorConfig文件中的数据库配置

    百度了很多资料,没有专门说这个的.大家都是配置自己的数据库,大部分是mysql.因为我使用的是postgresql,还是找了一会才找到配置指导. 毕竟第一次配置,还是要看着别人的指导比较安心.配置完后 ...

  8. JAVA Eclipse创建的Android程序如何不显示标题栏

    在manifest.xml文件的application节点添加下面一行即可 android:theme="@android:style/Theme.NoTitleBar" 如果要恢 ...

  9. apache的配置优化

    [APACHE的工作方式] prefork模式(默认)这个多路处理模块(MPM)实现了一个非线程型的.预派生的web服务器,它的工作方式类似于Apache 1.3.它适合于没有线程安全库,需要避免线程 ...

  10. Effective C++ 35,36,37

    35.使公有继承体现 "是一个" 的含义. 共同拥有继承意味着 "是一个".如  class B:public A. 说明类型B的每个对象都是一个类型A的对象, ...