1, 打开文件
2, 对文件进行读 / 写
3, 关闭文件
- # 打开文件, 文件路径可以是绝对路径, 路径前面 r 是原字符的意思, 不转义文件路径中转义字符
- # f= open(r'丽丽','a',encoding='utf-8')
- # f= open(r'用户名密码',encoding='utf-8')
- # 读取文件
- # print('read:\n',f.read()) #获取文件里面的所有内容
- # print('readline:',f.readline()) #读取文件一行的数据
- # print('readlines:',f.readlines()) #获取文件里面所有的数据, 返回的是一个 list, 每一行的数据放到一个 list 里面
- # 文件的指针, 是控制文件到底读到哪里的, 读文件和写文件时, 文件指针都会移动
- # 写文件
- # f.write('sfsdh') #写文件
- # 示例:
- f= open(r'文件读写','a+',encoding='utf-8')
- # f.seek(0) #移动文件指针到最前面
- # print(f.read())
- # f.write('会覆盖睡觉的好的老公') #写一个字符串
- f.writelines() #写一个 list
- # 示例:
- for i in list:
- f.writelines()
- # f.seek(0) #移动文件指针到最前面
- # print(f.read())
- #文件打开的三种模式: 只读模式; 写模式; 追加模式
- # 1, 有没有清空以前的内容
- # 2, 能不能读到东西
- # 3, 文件不存在的时候会不会报错
- # 读模式 r 默认模式, 只能读, 不能写, 文件不存在会报错,
- # 读写模式 r+ 可读可写, 打开不存在文件也会报错, 不会覆盖以前的内容, 写完文件后文件指针移动到文件最后边, 导致读不到东西
- # 写模式 w 只能写, 不能读, 会覆盖以前文件里面的内容, 文件不存在, 会帮你创建一个
- # 写读模式 w+ 可读可写, 写时会覆盖以前文件的内容, 读不报错, 但是读不到东西, 因为字写文件的时候文件指针移动到文件的最后边, 所以读不到东西
'''
只要沾上 r, 文件不存在肯定会报错, 文件指针在开头
只要沾上 w, 文件内容肯定会被清空, 文件指针在开头或者末尾
a 模式的文件指针在末尾
'''
- # 追加模式 a 在文件的末尾追加东西, 可写, 不会覆盖文件之前的内容, 文件不存在会新建文件, 但不可读, 会报错
- # 追加读模式 a+ 追加读模式, 能读能写, 不会清空以前的内容, 文件不存在会新建, 默认打开文件的时候文件指针在最后, 所以读不到东西.
- # f.seek(0) #移动文件指针到最前面
- # 示例 2
- names=['qq','ss','dd','cc']
- for name in names:
- f.write(name+'\n')
- # f.writelines(names) #传一个 list, 然后把 list 里面的每一个元素写到文件中
- # f.readlines()
- # f.close()
- print(f.read())
文件操作另一种方法
- # 用 with 打开文件
- with open('1 - 笔记','w') as f:
- f.read()
- f.write()
- # 用 with 同时打开 2 个及以上的文件
- with open('1 - 笔记','w') as f , open('用户名密码','w') as f2:
- f.read()
- f.write()
文件修改
- f=open('用户名密码','r+',encoding='utf-8')
- f.seek(0)
- data = f.read()
- new_data =data.replace('123','a')
- # print(new_data)
- f.seek(0)
- f.write(new_data)
这种文件修改方式会出错
第一种: 简单粗暴: 数据量小的时候可以用
1, 先获取到文件里面的所有内容
2, 然后修改内容
3, 清空源文件中所有内容
4, 重新写入
示例
- f=open('用户名密码','a+',encoding='utf-8')
- f.seek(0)
- data = f.read()
- new_data =data.replace('a','python')
- f.seek(0)
- f.truncate() #清空文件
- f.write(new_data)
- f.flush()
- # f.close()
- f.seek(0)
- print(f.read())
第二种: 高效的处理方式: 一行一行处理, 数据量大的时候用, 就是 win 系统中修改文件内容的原理
1, 先打开源文件: words, 再打开一个空文件: words_new
2, 循环处理源文件里面每一行数据, 处理完之后, 写到新文件里面
3, 把源文件删除, 把新文件的名字修改成源文件的名字
- 4,
- import os
- with open(r'words',encoding='utf-8') as fr , open('.words','w',encoding='utf-8')as fw:
- for line in fr:
- line=line.lstrip() #去掉左边的空格
- if line : #非空即真原理, 判断这一行是否有数据
- line=line.replace('你','you') #替换数据
- fw.write(line) #写到新文件中
- os.remove('words') #删除源文件
- os.rename('.words','words') #把新文件的名字更改成源文件名字
- import os
- with open(r'eamil',encoding='utf-8') as fr , open('.eamil','w',encoding='utf-8')as fw:
- for line in fr:
- # line=line.lstrip() #去掉左边的空格
- if not line[0].isdigit(): #判断是否为纯数字
- print('line:',line)
- line=line.replace('\n','@163.com\n') #替换数据
- fw.write(line) #写到新文件中
- fw.flush()
- os.remove('eamil') #删除源文件
- os.rename('.eamil','eamil') #把新文件的名字更改成源文件名字
- # print(name.isspace()) #判断只能有英文, 汉子就返回真
来源: http://www.bubuko.com/infodetail-2654694.html