在Python中也有涉及到文件的相关操作,从最简单的文件读取说起

  • 文件读取
  1. file = open('/Users/macbookpro/Desktop/使用教程.txt', 'r', encoding='utf-8')
  2. print(file.read())
  3. file.close()

使用open打开一个文件,第一个参数是文件路径,第二个参数是操作模式,第三个参数是文件编码。'r'代表的意思是只读方式,只可以读取文件里的内容。那么还有哪些操作呢

以行读取 readline(),后面括号可以添加数值指定读取几个字符:

  1. for i in range(4):
  2. print(file.readline())

使用readlines可以读取所有行,每一行都会作为一个元素成为一个列表:

  1. for index, line in enumerate(file.readlines()):
  2. if index == 8:
  3. print('------------------分割线---------------')
  4. continue
  5. print(line)
  6. file.close()

在这里我们读取每一行,当读到第八行的时候加上一条分割线

ps: enumerate函数,我们知道在普通的for循环里是没有偏移量,即在java中的index,在java中是for(int i=0;i<xx;i++)这种定义方式的,enumerate函数,它可以在循环中每次迭代的时候都会返回一个(index,'value')元组,这样既可以得到每次循环遍历的值,也由偏移量了。

但是需要注意的是,readlines是直接读取所有行,直接写入内存了,只适合一些小的文件。

在处理文件的时候需要每次都把文件给关闭,我们使用try...finally

  1. try:
  2.  
  3. for index, line in enumerate(file.readlines()):
  1. if index == 8:
    print('------------------分割线---------------')
    continue
    print(line)
    finally:
    file.close()
  1.  

但是每次都这样处理太麻烦了,Python中引入了with语句:

  1. with open('/Users/macbookpro/Desktop/使用教程.txt', 'r', encoding='utf-8') as file:
  2. for index, line in enumerate(file.readlines()):
  3. if index == 8:
  4. print('------------------分割线---------------')
  5. continue
  6. print(line)
  • 文件的写入

       file.write(),使用a模式追加写入

  1. with open('/Users/macbookpro/Desktop/使用教程.txt', 'a', encoding='utf-8') as file:
  2. file.write('一生挚爱')
  • 文件修改

我们修改一句歌词:

  1. with open('/Users/macbookpro/Desktop/使用教程.txt', 'r', encoding='utf-8') as file:
  2. lines = file.readlines()
  3.  
  4. with open('/Users/macbookpro/Desktop/使用教程.txt', 'w', encoding='utf-8') as new_file:
  5. for line in lines:
  6. if '红红落叶长埋尘土内' in line:
  7. line = line.replace('红红落叶长埋尘土内', '你是我天边最美的云彩')
  8. new_file.write(line)

在修改文件时如果直接使用w模式会将原本的文本清空覆盖,因此可以先用r的方式打开写入内存,再用w方式打开。

    

人生苦短之Python文件的IO操作的更多相关文章

  1. Atitit.跨语言  文件夹与文件的io操作集合  草案

    Atitit.跨语言  文件夹与文件的io操作集合  草案 1. Jdk原生的太难用了..1 2. PS: apache commons-io包,FileUtils有相关的方法,IOUtils一般是拷 ...

  2. 提高生产力:文件和IO操作(ApacheCommonsIO-汉化分享)

    复制.移动.删除.比较.监控.文件读写 等文件和IO操作是编程中比较常用的功能.        幸运的是,Apache Commons IO等开源组件已经帮我们实现了.        我们可以不用重复 ...

  3. python文件及目录操作

    python文件及目录操作 读/写文件 新建/打开文件 写入 #举个例子,打开D:\test\data.txt #以写入模式打开文件 #如果test(上级目录)不存在则报错 #如果data.txt(文 ...

  4. python文件的基础操作

    import os print(,'-')) print(os.getcwd()) print(,'-')) print(os.listdir()) print(,'-')) print(os.lis ...

  5. python中的IO操作

    python中的基本IO操作: 1) 键盘输入函数:raw_input(string),不作处理的显示,与返回. input(string),可以接受一个python表达式作为返回,python内部得 ...

  6. [ Python ] 文件的读写操作

    1. 文件读写操作 读写文件是最常见的 IO 操作, Python 内置了读写文件的函数.在磁盘上读写文件的功能是由操作系统提供的,所以读写文件是请求操作系统打开一个文件对象(通常称为文件描述符),然 ...

  7. [Python基础]006.IO操作

    IO操作 输入输出 print raw_input input 文件 打开文件 关闭文件 读文件 写文件 文件指针 实例 输入输出 输入输出方法都是Python的内建函数,并且不需要导入任何的包就可以 ...

  8. Linux文件的IO操作 一

    系统调用 系统调用: 操作系统提供给用户程序调用的一组“特殊”接口,用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务 为什么用户程序不能直接访问系统内核提供的服务 为了更好地保护内核空间, ...

  9. Python学习之-- IO 操作

    阻塞IO / 非阻塞IO /IO多路复用 / 异步IO 说明:同步IO包含(阻塞IO / 非阻塞IO /IO多路复用),因为他们有个共同特性就是都需要内核态到用户态的一个等待. 基本概念解释,环境限定 ...

随机推荐

  1. QBXT T15565 Day4上午道路分组

    有向并查集维护连通性 优化: vis数组表示能被节点1到达的点 显然,已经分在一个联通块中的点就没必要在用该点扩展了. #include<cstdio> #include<algor ...

  2. Java实验--关于课上找“水王”问题分析

    问题的表述就是说有那么一个人,他在一个论坛上发帖,然后每贴必回,自己也发帖.那么这个人在发帖的数目上就超过了整个论坛的帖子数目的一半以上. 我对这个问题一开始的思路是,用SQL语句获取整个列表中的数据 ...

  3. 小R与手机

    Description 小R有n部手机,为了便于管理,他对一些手机设置了"呼叫转移"的功能. 具体来说,第 i(1≤i≤n) 部手机有个参数 ai(0≤ai≤n,ai≠i) .若 ...

  4. P2P技术简介(包括BT软件的分析)(转)

    这是一篇别人发表的论文,里面很全面的解释了P2P技术的实现,以及BT网络中应用P2P技术所设计的原理,并列举BT软件的一些专业名词的定义.由于论文发表的比较早,2005年时还没有DHT技术. (链接: ...

  5. Microsoft SQL Server 2005技术内幕:存储引擎笔记

    http://www.cnblogs.com/lyhabc/articles/3942053.html

  6. Eval is evil ('Eval是魔鬼') --- eval()函数

    Eval is evil ('Eval是魔鬼') eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码.语法:eval(string): eval的使用场合是什么呢?有时候我 ...

  7. JFinal学习 & Gradle配置续 & Tomcat配置

    接上一篇对Gradle的学习,再用JFinal项目再建一个. 参考了这篇文章:https://my.oschina.net/u/1010578/blog/390094 但是其中没有代码,所以看了这篇  ...

  8. 【转载】使用事件模型 & libev学习

    参考这篇文章: http://www.ibm.com/developerworks/cn/linux/l-cn-edntwk/ 这里面使用的是 libev ,不是libevent Nodejs就是采用 ...

  9. [转] RabbitMQ介绍

    转自: http://lynnkong.iteye.com/blog/1699684 1      什么是RabbitMQ? RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初 ...

  10. 手把手教你nginx/linux下如何增加网站

    先进入到nginx的配置文件目录请输入以下命令 cd /alidata/server/nginx/conf/vhosts 再输入   ll 看看是不是像下面截图的一样 用神器xftp将default. ...