打开文本文件
python对文件的处理的两个内建函数:
open()、file(),这个两函数提供了初始化输入\输出(I\O)操作的通用接口。两函数的功能相同。
基本用法:
file_object=open(filename, access_mode='r', buffering=-1)
file_object 是定义一个打开文件的对象
access_mode 是打开文件的模式;通常,文件使用模式 'r','w','a' 来打开,分别代表,读取,写入,追加。
'r' 模式打开已经存在的文件
'w' 模式打开的文件若存在则首先清空,再加入内容。
'a' 这个模式是追加内容到文件中
注. 'b' 模式这个是打开二进制文件,对于unix-like/unix类型的系统'b'模式是可有可无的。
buffering 访问文件所采用的缓冲方式。其中0表示不缓冲,1表示只缓冲一行数据,任何其它大于1的值代表使用给定的值作为缓冲区大小。不给定此参数或者参数为负数都表示使用系统默认的缓冲机制。
常用的文件访问方式如下:
r 以读方式打开
rU或Ua 以读方式打开同时提供通用换行符支持
w 以写方式打开
a 以追加方式打开
r+ 以读写方式打开
w+ 以读写方式打开
a+ 以读写方式打开
文件的输入:
python中有三个方法来处理文件内容的输入:
read() 一次读取全部的文件内容。
readline() 每次读取文件的一行。
readlines() 读取文件的所有行,返回一个字符串列表。
字符串的替换
三种类型的替换:
1. 修改源文件:
file_data = ""
with open(file,"r", encoading="utf-8") as f:
for line in f:
if old_str in line:
line = line.replace(old_str,new_str)
file_data += line
with open(file,"w",encoding="utf-8") as f:
f.write(file_data)
2. 把源文件内容经过修改后写到新文件中去
import os
with open(file,"r",encoding="utf-8") as f1, open("%s.bak" % file,"w", encoding="utf-8") as f2:
for line in f1:
if old_str in line:
line = line.replace(old_str,new_str)#replace只能对同一个line变量来做
f2.write(line)
os.remove(file)
os.rename("%s.bak" % file,file)
3.使用正则表达式re.sub来替换
import re,os
with open(file,"r" encoding="utf-8") as f1,open("%s.bak" % file, "w" ,encoding="utf-8") as f2:
for line in f1:
f2.write(re.sub(old_str,new_str,line))
os.remove(file)
os.rename("%s.bak" % file,file)
alter("file1", "admin","password")
字符串替换与分割
1 替换
参考link:
函数 replace()
python 中的
replace()
方法把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次
str.replace(old, new[, max])
a = 'Hello,world. ByeBye!'
print(a.replace('l','Q'))
print(a.replace('abcdefghi','0123456789'))
print(a.replace('world','apple'))
HeQQo,worQd. ByeBye!
Hello,world. ByeBye!
Hello,apple. ByeBye!
可见,replace()
函数可以替换string中的单个字符,也可以替换连续的字符,但无法生成字符替换映射表。
pandas 里面也有一个replace()函数,其用法更加多样化。比如,可以加入一个字典,用于替换对不同的值进行替换。
s = pd.Series([0, 1, 2, 3, 4])
s.replace({0:'a',1:'b'})
Out[2]:
0 a
1 b
2 2
3 3
4 4
dtype: object
函数 translate()
translate()
函数也是python自带。与replace() 函数不同的是,这里使用str.maketrans
函数来创建一个表,它可以使用各种参数,但是需要三个Arguments。
str.maketrans('','',del)
第一个参数为被替换的字符,第二个参数为替换的字符,第三个参数为要删除的字符
import string
a = 'Hello,world. ByeBye!'
remove = string.punctuation
table = str.maketrans('abcdefgh','01234567',remove)
print(a.translate(table))
H4lloworl3 By4By4
函数re.sub()
这个是re库里的函数,其原型为re.sub(pattern, repl, string, count)
第一个参数为正则表达式需要被替换的参数,第二个参数是替换后的字符串,第三个参数为输入的字符串,第四个参数指替换个数。默认为0,表示每个匹配项都替换。
import re
a = 'Hello,world. ByeBye!'
print(re.sub(r'[A-Z]', '8', a))
8ello,world. 8ye8ye!
上述例子是把所有的大写字母替换成8,下述表示只替换前2个这样的大写字母。
print(re.sub(r'[A-Z]', '8', a, 2))
8ello,world. 8yeBye!
2. 分割
另外link:https://www.runoob.com/python3/python3-string-splitlines.html
函数split()
1、语法:
str.split(str="",num=string.count(str))[n]
1str:表示为分隔符。默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等,但是不能为空(’’)。若字符串中没有分隔符,则把整个字符串作为列表的一个元素
num:表示分割次数。默认为 -1, 即分隔所有,如果存在参数num,则仅分隔成 num+1 个子字符串,并且每一个子字符串可以赋给新的变量
[n]:表示选取分割的列表中下标为n的分片
返回值:返回分割后的字符串列表
2、分离字符串
str = "www.csdn.net"
1
2.1.以’.'为分隔符
print(str.split('.'))
>>
['www', 'csdn', 'net']
123
2.2.分割一次
print(str.split('.',1))
>>
['www', 'csdn.net']
123:wq
2.3.分割两次,并取序列为1的项
print(str.split('.',2)[1])
>>
123
2.4.分割两次,并把分割后的三个部分保存到三个文件
s1, s2, s3 =str.split('.',2)
print(s1) >>> www
print(s2) >>> csdn
print(s3) >>> net
1234567
二、os.path.split()函数
1.语法:
os.path.split('PATH')
1
1.PATH指一个文件的全路径作为参数:
2.如果给出的是一个目录和文件名,则输出路径和文件名
3.如果给出的是一个目录名,则输出路径和为空文件名
2、分离文件名和路径
import os
print(os.path.split(’/d/soft/python/’))
(’/d/soft/python’, ‘’)
print(os.path.split(’/d/soft/python’))
(’/d/soft’, ‘python’)
3、实例:获得域名
str="hello csdn<[www.csdn.net]>byebye"
print(str.split("[")[1].split("]")[0])
12345
我们在学习 python 爬虫的时候例如需要保存图片,图片名称的获取,可以依照下列方法:
url = "http://www.baidu.com/python3/image/123.jpg"
path =url.split("/")[-1]
输出结果:
'123.jpg'
函数splitlines()
描述
Python splitlines() 按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。
语法
splitlines()方法语法:
str.splitlines([keepends])
参数
- keepends -- 在输出结果里是否去掉换行符('\r', '\r\n', \n'),默认为 False,不包含换行符,如果为 True,则保留换行符。
返回值
返回一个包含各行作为元素的列表。
实例
以下实例展示了splitlines()函数的使用方法:
>>> 'ab c\n\nde fg\rkl\r\n'.splitlines()
['ab c', '', 'de fg', 'kl']
>>> 'ab c\n\nde fg\rkl\r\n'.splitlines(True)
['ab c\n', '\n', 'de fg\r', 'kl\r\n']
>>>
去除文本最后的空格行,strip()方法
函数strip()
描述
Python strip() 方法用于移除字符串头尾指定的字符(默认为空格)或字符序列。
注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
语法
strip()方法语法:
str.strip([chars]);
参数
- chars -- 移除字符串头尾指定的字符序列。
返回值
返回移除字符串头尾指定的字符序列生成的新字符串。
实例
以下实例展示了 strip() 函数的使用方法:
实例(Python 3.0+)
#!/usr/bin/python3
str = "*****this is **string** example....wow!!!*****"
print (str.strip( '*' )) # 指定字符串 *
以上实例输出结果如下:
this is **string** example....wow!!!
从结果上看,可以注意到中间部分的字符并未删除。
以上下例演示了只要头尾包含有指定字符序列中的字符就删除:
实例(Python 3.0+)
#!/usr/bin/python3
str = "123abcrunoob321"
print (str.strip( '12' )) # 字符序列为 12
以上实例输出结果如下:
3abcrunoob3