## 打开一个文件
  - fileobj = open(filename, mode)
  其中:
    fileobj是open()返回的文件对象
    filename是该文件的字符串名
    mode是指明文件类型和操作的子字符串
  
  - mode的第一个字母表示对其的操作
    - r表示读取
    - w表示写入,如果文件不存在就创建,如果存在则重新写入新内容
    - x表示在文件不存在的情况下新创建并写文件
    - a表示如果文件存在,在文件末尾追加内容

  - mode的第二个字母是文件类型
    - t(或者省略)代表文本类型
    - b代表二进制文件

## 使用write()写入文件,使用close()关闭文件

  1. poem = """
  2. 离离原上草,一岁一枯荣。
  3. 野火烧不尽,春风吹又生。
  4. 远芳侵古道,晴翠接荒城。
  5. 又送王孙去,萋萋满别情。
  6. """
  7. file_obj = open("诗", 'wt') # 打开名为‘诗’的文本文件,若‘诗’不存在则创建
  8. file_obj.write(poem) # 写入文件
  9. file_obj.close() # 关闭文件

  - 也可以使用print()写入文件

  1. poem = """
  2. 离离原上草,一岁一枯荣。
  3. 野火烧不尽,春风吹又生。
  4. 远芳侵古道,晴翠接荒城。
  5. 又送王孙去,萋萋满别情。
  6. """
  7. file_obj = open("诗", 'wt') # 打开名为‘诗’的文本文件,若‘诗’不存在则创建
  8. print(poem, file=file_obj) # 写入文件
  9. file_obj.close() # 关闭文件

  - 如果需要写入的内容非常多,可以将数据分块写入

  1. poem = """
  2. 离离原上草,一岁一枯荣。
  3. 野火烧不尽,春风吹又生。
  4. 远芳侵古道,晴翠接荒城。
  5. 又送王孙去,萋萋满别情。
  6. """
  7. file_obj = open("诗", 'wt') # 打开名为‘诗’的文本文件,若‘诗’不存在则创建
  8.  
  9. start = 0
  10. chunk = 20 # 每次写入20个字符
  11. while True:
  12. if start > len(poem):
  13. break
  14. file_obj.write(poem[start:start+chunk])
  15. start += chunk
  16.  
  17. file_obj.close() # 关闭文件

## 文件读取
  - read():不带参数的read()函数一次读取文件的所有内容

  1. file_obj = open("诗", 'rt') # 使用读取模式打开文本文件
  2. poem = file_obj.read() # 读取文件中所有内容
  3. file_obj.close() # 关闭文件
  4. print(poem)
  5. """
  6. 输出:
  7. 离离原上草,一岁一枯荣。
  8. 野火烧不尽,春风吹又生。
  9. 远芳侵古道,晴翠接荒城。
  10. 又送王孙去,萋萋满别情。
  11. """

 

   - 同样可以分块读取

  1. poem = ''
  2. file_onj = open("诗", 'rt')
  3. chunk = 20 # 每次读取20个字符
  4. while True:
  5. frag = file_onj.read(chunk)
  6. if not frag: # 读到文件末尾时再次调用read()函数会返回空字符串,not frag为真,执行break
  7. break
  8. poem += frag
  9.  
  10. print(poem)
  11. """
  12. 输出:
  13. 离离原上草,一岁一枯荣。
  14. 野火烧不尽,春风吹又生。
  15. 远芳侵古道,晴翠接荒城。
  16. 又送王孙去,萋萋满别情。
  17. """

  - 一行一行的读取

  1. poem = ''
  2. file_obj = open('诗', 'rt')
  3. while True:
  4. line = file_obj.readline()
  5. if not line:
  6. break
  7. poem += line
  8.  
  9. print(poem)
  10. """
  11. 输出:
  12. 离离原上草,一岁一枯荣。
  13. 野火烧不尽,春风吹又生。
  14. 远芳侵古道,晴翠接荒城。
  15. 又送王孙去,萋萋满别情。
  16. """

  - 使用迭代器读取文件

  1. poem = ''
  2. file_obj = open("诗", 'rt')
  3. for line in file_obj: # 效果相同,但代码更短
  4. poem += line
  5.  
  6. print(poem)
  7. """
  8. 输出:
  9. 离离原上草,一岁一枯荣。
  10. 野火烧不尽,春风吹又生。
  11. 远芳侵古道,晴翠接荒城。
  12. 又送王孙去,萋萋满别情。
  13. """

  - readlines():每次读取一行,并返回单行字符串的列表

  1. file_obj = open("诗", 'rt')
  2. lines = file_obj.readlines()
  3. print(lines)
  4. for line in lines:
  5. print(line, end='')
  6.  
  7. """
  8. ['\n', ' 离离原上草,一岁一枯荣。\n', ' 野火烧不尽,春风吹又生。\n', ' 远芳侵古道,晴翠接荒城。\n', ' 又送王孙去,萋萋满别情。\n']
  9.  
  10. 离离原上草,一岁一枯荣。
  11. 野火烧不尽,春风吹又生。
  12. 远芳侵古道,晴翠接荒城。
  13. 又送王孙去,萋萋满别情。
  14. """

## write()写入二进制文件

  1. bin_data = bytes(range(0, 255)) # 将序列转换为二进制数据
  2. f = open('bin_file', 'wb') # 以二进制文件的格式打开文件
  3. f.write(bin_data) # 写入
  4. f.close() # 关闭

  - 分段写入

  1. bin_data = bytes(range(0, 255))
  2. f = open('bin_file', 'wb')
  3. chunk = 100 # 每次写入100个字节
  4. offset = 0
  5. while True:
  6. if offset > len(bin_date):
  7. break
  8. f.write(bin_data[offset:chunk + offset])
  9. offset += chunk
  10.  
  11. f.close()

  - 读取二进制文件

  1. f = open('bin_file', 'rb')
  2. bin_data = f.read()
  3. f.close()

## 使用with自动关闭文件,with代码块执行完毕后自动关闭文件

  1. with open("诗", 'rt') as f:
  2. poem = f.read()
  3.  
  4. print(poem)
  5. """
  6. 输出:
  7. 离离原上草,一岁一枯荣。
  8. 野火烧不尽,春风吹又生。
  9. 远芳侵古道,晴翠接荒城。
  10. 又送王孙去,萋萋满别情。
  11. """

本文参考:

  [美]Bill Lubanovic 《Python语言及其应用》

Python文件IO(普通文件读写)的更多相关文章

  1. 文件IO——将文件dfs的文件内容第三个字节之后的内容复制到文件dfd中

    /* 使用文件IO将文件fds中的内容复制到文件fdd中去 1.创建两个文件描述符 2.使用open()方法分别以只读只写方式将文件描述符符文件连接 3.将读位置后移三位 4.将fds内容存储到缓冲区 ...

  2. Python之IO编程——文件读写、StringIO/BytesIO、操作文件和目录、序列化

    IO编程 IO在计算机中指Input/Output,也就是输入和输出.由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘.网络等,就需要IO接口.从 ...

  3. 第9.11节 Python中IO模块文件打开读写操作实例

    为了对前面学习的内容进行一个系统化的应用,老猿写了一个程序来进行文件相关操作功能的测试. 一. 测试程序说明 该程序允许测试人员选择一个文件,自己输入文件打开模式.写入文件的位置以及写入内容,程序按照 ...

  4. Python中的文件IO操作(读写文件、追加文件)

    Python中文件的读写包含三个步骤:打开文件,读/写文件,关闭文件. 文件打开之后必须关闭,因为在磁盘上读写文件的功能是由操作系统提供的,文件作为对象,被打开后会占用操作系统的资源,而操作系统在同一 ...

  5. 【Python】[IO编程]文件读写,StringIO和BytesIO,操作文件和目录,序列化

    IO在计算机中指Input/Output,也就是输入和输出. 1.文件读写,1,读文件[使用Python内置函数,open,传入文件名标示符] >>> f = open('/User ...

  6. [python 学习] IO操作之读写文件

    一.读取全部文件: # -*- coding: utf-8 -*- f = open('qq_url.txt','r'); print f.read(); f.close(); 二.读取规定长度文件 ...

  7. Java文件(io)编程——文件字节流的使用

    案例1: 演示FileInputStream类的使用(用FileInputStream的对象把文件读入到内存) 首先要在E盘新建一个文本文件,命名为test.txt,输入若干字符 public cla ...

  8. UNIX,基础知识,文件IO,文件和目录

    2015.1.27星期二,早晨阴天,中午下雪了今天上午老师不上课,程序语句,记一下:main(void){ int c; while((c = getc(stdin)) != EOF) if(putc ...

  9. Java文件(io)编程——文件字符流的使用

    案例1: 读取一个文件并写入到另一个文件中,char[] 来中转. 首先要在E盘下创建一个文本文档,命名为test.txt,输入一些字符串. public class Demo_5 { public ...

随机推荐

  1. MongoDB Windows环境搭建

    简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. MongoDB 旨在为WEB应用提供可扩展的高性能数据存 ...

  2. jquery validation yyyy-MM-dd格式日期在ie中无法验证通过

    自己开发的公众号,可以领取淘宝内部优惠券 问题 首先在ie6.7.8下面打开这个页面http://jqueryvalidation.org/date-method/,输入的日期格式为:yyyy-MM- ...

  3. Offic转换pdf 之asposeDLL插件

    //excel转换 Workbook workbook = new Workbook(HttpContext.Current.Server.MapPath(docpath + "/" ...

  4. 配置Slf4j依赖,桥接各种多个日志组件(排除commons-logging依赖的影响)

    由于各个jar组件使用的日志框架不一样,实际项目中可能会引入多个jar,通常使用的日志框架有 commons-logging log4j 若同一个项目引入多个日志组件,那么Slf4j组件会有不能捕捉到 ...

  5. >>我要做特工系列 之 CSS 3_animation_向右滑出后下滑并停止

    新手入门还没有正式发点啥东西,都是在装潢博客这个家了,到现在为止还是没有装修好..熟悉了这边的发布规范之后会持续在这里记录,给自己留下学习的脚印~ 这正式的第一篇随笔写个使用css3的动画效果. 总感 ...

  6. 【起航计划 030】2015 起航计划 Android APIDemo的魔鬼步伐 29 App->Preferences->Preferences from code

    这里我们使用类比的方法,将 PreferenceActivity 与一般的Activity 作个类比,可以更好的理解Android.Preference中的各个类. PreferenceActivit ...

  7. react-native与原生界面相互跳转

    一.添加MyIntentModule类,并继承ReactContextBaseJavaModule实现其方法和构造函数.在该类中添加方法,注意:方法头要加@ReactMethod public cla ...

  8. open ssh 常用的东西

    清除已经存在的但是不同设备的连接信息 ssh-keygen -f "/users/he/.ssh/known_hosts" -R 192.168.1.118 无密码登录openss ...

  9. Qt开发北斗定位系统融合百度地图API及Qt程序打包发布

    Qt开发北斗定位系统融合百度地图API及Qt程序打包发布 1.上位机介绍 最近有个接了一个小型项目,内容很简单,就是解析北斗GPS的串口数据然后输出经纬度,但接过来觉得太简单,就发挥了主观能动性,增加 ...

  10. due to a StackOverflowError. Possible root causes include a too low。。

    我们可以用另外的办法来解决这个问题,我们让tomcat不扫描指定的jar包,tomcat就要轻松得多了,org.apache.tomcat.util.scan.StandardJarScanner中定 ...