一、文本处理的格式
1.1、文件对象=open(文件的路径,mode=文件的打开模式,encoding=字符编码)
f=open(r'C:\Users\stsud\Desktop\Pycharm文档\员工信息.txt',mode='r',encoding='utf-8') #'r'表示"原生字符串",具有转译的作用
data=f.read()
print(data)
f.close() #open打开文件后需要使用close关闭被打开的文件(否则在操作系统中打开了太多的文件,占用系统资源)
# >>:1,Alex
# >>:2,Jack
# >>:3,Rain
# >>:4,Mack
注释:1、r'C:\Users\stsud\Desktop\Pycharm文档\员工信息.txt' #"r"表示"原生字符串",具有转译的作用
2、mode='r' #以只读模式打开这个文件
3、encoding='utf-8' #指定打开文件所使用的字符集
4、f.close() #回收操作系统打开的文件
强调:以上操作涉及两方面的资源
1、操作系统需要打开文件"C:\Users\stsud\Desktop\Pycharm文档\员工信息.txt"
2、f就是一个python的变量
1.2、使用with open打开多个文件 -- with open打开一个文件后,不需要再去使用f.close()关闭被打开的文件了,python会做这一个的处理
# 打开多个文件
with open(r'test.txt',mode='r',encoding='utf-8')as f,\
open(r'test2.txt',mode='r',encoding='utf-8')as f2:
res=f.read()
res2=f2.read()
print(res)
print(res2)
注释:with open打开一个文件后,不需要再去使用f.close()关闭被打开的文件了,python会做这一个的处理
二、文件的打开模式
2.1、r:默认的打开模式,只读模式,文件如果不存在则报错
f.read() # 只读模式中,会读取文件内所有的内容
f.readline() # 每次都会打开一行
f.readlines() # 把所有的文件内容转换成列表的形式
with open('a.txt',mode='r',encoding='utf-8') as f:
print(f.read()) #只读模式中,会读取文件内所有的内容
# >>:aaa
# >>:bbb
# >>:ccc
print(f.readline()) #每次都会打开一行
# >>:aaa
print(f.readlines()) #把文件的内容转换成列表的形式
# >>:['aaa\n', 'aaa\n', 'aaa']
2.2、w:只写模式(不可读),文件存在则清空(覆盖),文件如果不存在则创建
with open('test.txt',mode='w',encoding='utf-8')as f:
f.write('你好\n') # 每次往文件内写内容时,都是从文件开头开始写(文件原有内容将被覆盖)
# 你好
list=['aaa\n','bbb\n','ccc\n','ddd\n','eee\n']
dic={"aaa":111,"bbb":222}
f.writelines(list) # 把一个列表里面的内容全部写到文件内
# aaa
# bbb
# ccc
# ddd
# eee
f.writelines(dic) # 把一个字典里面的key全部写到文件内
# aaabbb
2.3、a:只追加写模式,文件存在指针直接移动到文件末尾,文件如果不存在则创建
with open('a.txt', mode='a', encoding='utf-8') as f:
f.write('aaa\n') #在文件末尾追加内容
# >>:你好啊
# >>:你好啊
# >>:aaa
三、控制文件读写单位的模式
3.1、t:默认的模式(只能处理文本文件类型 "rt","wt","at")
with open('1.png',mode='rt',encoding='utf-8') as f:
f.read() # 在t模式下,打开png类型的文件时会报错
3.2、b:二进制模式,(可以处理任意文件类型"rb","wb","ab") 该模式下读写但都是bytes,该模式下不能指定encoding参数
3.2.1、非txt类型的文件,使用b模式打开后的效果
with open('1.png',mode='rb') as f:
data=f.read()
print(data)
print(type(data))
# >>:b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x03\xb5\x00\x00\x02c\x08\x02\x00
# >>:<class 'bytes'># >>:
3.2.1、txt类型的文件,使用rb模式打开后的效果(txt类型的文件使用b模式后可以使用data.decode('utf-8')的方式读取文件内容)
with open('a.txt',mode='rb') as f:
data=f.read()
print(data)
print(type(data))
# >>:b'\xe4\xbd\xa0\xe5\xa5\xbd\xe5\x95\x8aalex SB\r\n\xe4\xbd\xa0\xe5\xa5\xbd\xe5\x95\x8awxx SB\r\naaa'
# >>:<class 'bytes'>
print(data.decode('utf-8')) #文本类型的文件使用b类型后,可以通过data.decode('utf-8')的方式把二进制内容识别出来
# >>:你好啊
# >>:你好啊# >>:
# >>:aaa
3.2.3、txt类型的文件,使用wb模式打开后的效果(二进制模式打开一个文件,需要使用.encode('utf-8')指定写的内容以哪种字符编码存储到文件)
with open('a.txt',mode='wb') as f:
f.write('你好的啦啦\n'.encode('utf-8'))
f.write('我好的啦啦\n'.encode('utf-8'))
# >>:你好的啦啦
# >>:我好的啦啦
3.3、rt+:可读也可写(rt+模式相当于r+w,即可读也可写)
四、COPY 文件(读取源文件里面的内容写到新文件内)
4.1、使用读取源文件的内容,然后把源文件的内容写入到新文件里面的方式实现copy文件的效果~
实现效果 python3 copy.py 复制文件 粘贴文件
import os,sys
src_file=sys.argv[1] # src_file就是$1 源文件(源文件必须存在)
dst_file=sys.argv[2] # dst_file就是$2 目标文件
if not os.path.isfile(src_file):
print('文件不存在')
sys.exit() # 整个程序都退掉
with open(r'%s' %src_file,mode='rt',encoding='utf-8')as read_file,\
open(r'%s' %dst_file,mode='wt',encoding='utf-8')as write_file:
for line in read_file: # 循环读取源文件内容
write_file.write(line) # 然后写入到目标文件内
在命令行执行命令:python3 3.py c.txt test.txt
4.2、课外学习:执行Python命令时,拿到被执行脚本的名称,$1 $2
import os,sys
print(sys.argv)
# ['3.py', '111', '222']
print(sys.argv[0])
# 3.py
print(sys.argv[1])
# 111
print(sys.argv[2])
# 222
执行Python命令:python3 3.py 111 222
那么就可以拿到一个值(以列表的形式):['3.py', '111', '222']
4.3、Python脚本里面常用的脚本使用方法提示:
#!/usr/bin/env python
# -*- coding: utf8 -*-
import sys
parameter=sys.argv
if len(parameter) != 5:
print('Usage: %s server_name pack_name config_name [IP|all|division]' %(parameter[0]))
else:
print('test release server')
4.2.1、os模块下的删除与重命名功能
import os
os.remove('c.txt') # 删除c.txt文件
os.rename('v.txt','c.txt') # 重命名v.txt为c.txt
五:修改文件内容的两种方式
方式一、把文件内容读出,然后修改,然后再重新打开这个文件(文件内容会被清空),把修改后的内容写进去
修改文件的方式一:
with open('a.txt','r',encoding='utf-8')as f: #把文件以读的方式取出
data=f.read() #把读到的内容复制给一个变量
data=data.replace('武大郎','武二郎') #把文件内的内容中的'武大郎'替换成'武二郎',使用data.replace修改,然后把修改后的文件内容赋值给一个变量
with open('a.txt','w',encoding='utf-8')as f: #把文件以写的方式打开(由于文件已存在,所以文件内容会被清空)
f.write(data) #然后以写的方式把修改后的内容data写到新文件中
# >>:武二郎 老女孩 211223344533 男
# >>:武二郎1 老女孩 211113452233 女
方式二、一行行读文件内容,把读取到的内容与要修改的内容做匹配,把修改后的文件内容写到一个新文件内,然后删除老的文件,把新文件重命名为老文件
#修改文件的方式二:
import os
with open('a.txt','r',encoding='utf-8')as f,\
open('b.txt','w',encoding='utf-8') as f_new: #把文件以读的方式取出
for line in f: #一行行读取源文件内容
if '武二郎' in line: #判断要修改的内容'武二郎'是否存在于文件中
line=line.replace('武二郎','武大郎') #如果'武二郎'存在于文件中,那么就是要line.replace把'武二郎'修改成'武大郎'
f_new.write(line) #然后把修改后的内容写到新的文件中去
os.remove('a.txt') #由于上面的写操作是把a.txt文件的内容写到新的b.txt文件中,源文件(a.txt)是没有任何修改的,那么就要使用os.remove('a.txt')删除a.txt文件
os.rename('b.txt','a.txt') #删除源文件a.txt后,使用os.rename把b.txt重命名为a.txt,相当于修改了a.txt
# >>:武大郎 老女孩 211223344533 男
# >>:武大郎1 老女孩 211113452233 女