python3文本文件处理

打开文本文件

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:https://www.cnblogs.com/bjwu/p/9038910.html
函数 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. 分割

转载自:https://blog.csdn.net/gxz987/article/details/90345811

另外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])
>>
csdn
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])

www.csdn.net
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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值