用word操作一个文件的流程如下:

1、找到文件,双击打开

2、读或修改

3、保存&关闭

用python操作文件也差不多:

 f=open(filename)  # 打开文件
f.write("我是野生程序员") # 写操作
f.read() #读操作
f.close() #保存并关闭

不过有一点跟人肉操作word文档不同,就是word文档只要打开了,就即可以读、又可以修改。 但Python比较变态,只能以读、创建、追加 3种模式中的任意一种打开文件,不能即写又读。

1、只读模式(读模式只可读

 f = open('小重山', 'r', encoding='utf8') # 读模式只可读 写模式只可写
data = f.read(8) # 里面的值是取出来多少个字符 在python3中英字母和汉字是一个字符 Hello 在学
print(data)
f.close()

2、只写模式(写模式只可写,在创建对象的同时将文本里原本的内容清空掉

 f = open('小重山2', 'w', encoding='utf8')  # 写模式只可写,在创建对象的同时将文本里原本的内容清空掉
# 如果没有文件名将创建一个新的文件
print(f.fileno()) # 操作句柄 本质上就是一个对象
f.write('Hello World\n')
f.write('xiaohu')
f.close() # 关闭文件

3、追加模式(在文件内容后面添加新的内容 追加模式

 f = open('小重山2', 'a', encoding='utf8')  # 'a'在文件内容后面添加新的内容 追加模式
f.write('\nHello World\n')
f.write('alex')
time.sleep(5)
# f.close() # 关闭文件

4、混合模式

(1)r+(读写模式)

 f = open('小重山', 'r+', encoding='utf8')
print(f.readline())
f.write('岳飞')
for i in f:
print(i.strip()) # 一行一行的读取
f.close()

(2)w+(写读模式,w+先清空)

 f = open('小重山', 'w+', encoding='utf8')
print(f.readline()) # 读不出来内容 因为w+先清空
f.write('岳飞')
print(f.tell()) # 还是读不出内容,因为光标在输入的内容后面,后面是没有内容的
f.seek(0) # 要想在控制台显示内容,就要移动光标
for i in f:
print(i.strip()) # 移动光标之后就能看到内容了
f.close()

(3)a+(追加读模式)

 f = open('小重山', 'a+', encoding='utf8')
print(f.tell()) # 在文本内容末尾
print(f.readline()) # 此时控制台是没有显示任何内容的,因为光标在'a+'模式中在内容的末尾
f.close()

用法

1、文件操作之flush及遍历文件最优算法(1)

 print(f.readline())  # 输出文件第一行的内容 换行符也打印了
print(f.readline()) # 输出文件下一行的内容
print(f.readlines()) # 使用列表将一行一行的内容输出 换行符\n也输出
number = 0
a = f.readlines() # 使用列表将一行一行的内容存起来
for i in a: # 使用for循环来将列表内容输出
number += 1
if number == 2:
# print(i.strip(), 'xiaohu') # 加strip()方法去掉换行
i = '*****'.join([i.strip(), 'iiii']) # 字符串拼接用 join 不要用 +
print(i.strip())
f.close() # 关闭文件

2、文件操作之flush及遍历文件最优算法(2)

 f = open('小重山2', 'a', encoding='utf8')

 for i in range(30):
sys.stdout.write("*") # stdout 是一个终端的输出显示
sys.stdout.flush()
time.sleep(0.2) # 每隔0.2秒显示 for i in range(30):
print('*',end=' ',flush=True)
time.sleep(0.2) # 每隔0.2秒显示 f.truncate(5) # 在光标30处后面全删 'w'中全部格式化 ‘a’中正常截断
f.write('Hello world')
f.truncate(5)
f.close()

3、在某一行末尾添加字符串添加

 f = open('小重山', 'r+', encoding='utf8')
number=0
for line in f:
number+=1
if number==6:
line=''.join([line.strip(),'xiaohu'])
# f.write('xiaohu') # 写永远是在最后一行写 所以直接write()行不通!!!!!!! 因为存储机制决定了无法修改
print(line.strip())
f.close()

4、将一个文件里的内容写到另一个文件里,并且修改某一行

 f_read=open('小重山','r',encoding='utf-8')
f_write = open('小重山2','w',encoding='utf-8')
number = 0
for line in f_read:
number+=1
if number==5:
print(line)
line='hello 岳飞\n' # 将这一行内容进行修改
print(line)
f_write.write(line) # 将一个文件里的内容一行一行写到另一个文件里
f_read.close()
f_write.close()

5、文件操作之with方法

with open('log','r') as f: # 只要退出with代码块,自动帮你关,相当于f.close(),
f.readline()
f.read() with open('log1','r',encoding='utf-8') as f_read,open('log2','w',encoding='utf-8') as f_write: # 可以同时管理多个文件
# 相当于f_read=open('小重山','r',encoding='utf-8')
# f_write = open('小重山2','w',encoding='utf-8')
for line in f_read:
....

  

最新文章

  1. 第 1 章 HTML5 概述
  2. jQuery静态方法type使用和源码分析
  3. 修改一行SQL代码 性能提升了N倍
  4. Failed to load resource: the server responded with a status of 413 (Request Entity Too Large)
  5. Prism之使用EventAggregation进行模块间通信
  6. 使用Func<>和Action简化委托
  7. 面试 | 商汤科技面试经历之Promise红绿灯的实现
  8. python+selenium自动化软件测试(第3章):unittest
  9. sql server 查询log日志 sql语句
  10. 编程菜鸟的日记-《软件测试》Ron Patton著-读书笔记
  11. TinScrapy-简化的Scrapy原码-查看爬虫的执行流程
  12. Player启动时提示 "System.InvalidOperationException:无法加载计数器名称数据
  13. docker18.09.5 Dockerfile文件编写
  14. 常用笔记:MySQL
  15. windows下如何修改mysql的端口号
  16. ng-深度学习-课程笔记-0: 概述
  17. ionic 编写自定义控件
  18. Maven 基础配置
  19. TypeScript学习笔记(四) - 类和接口
  20. ThinkPHP的ajaxReturn方法的使用

热门文章

  1. Nebula 架构剖析系列(一)图数据库的存储设计
  2. ORM查询2
  3. asp.net core 腾讯验证码的接入
  4. wildfly(JBoss AS)应用服务器快速入门
  5. Python制作有道翻译小工具
  6. 不就是SELECT COUNT语句吗,竟然能被面试官虐的体无完肤
  7. 虚拟机桥接模式下将虚拟IP设为静态IP
  8. call,apply和bind详解
  9. Maven安装和在IDEA配置Maven
  10. CentOS6.5下搭建文件共享服务(Samba)