【python】文本处理:删除包含关键词的行、删除指定列、删除指定字符、替换关键字……

目录

1、行处理

删除文件中包含关键词的行

删除TXT中的带/不带指定字符的行(并保留带指定字符的行)

        删除匹配or不匹配某些条件的行

2、字符处理

删除特定字符

1.1、删除特定位置的字符

1.2、删除指定字符

1.3、删除每一行首/尾匹配条件的字符

正则表达式

替换文件里的字符

3、列处理

删除TXT中每一行前面的数字字符

删除csv文件中的某几列

读取txt文件并取其某一列数据

删除TXT中的某列

读取TXT中的列到excel中

 将数字大小在9.500到12.500之间的行保留

4、报错记录


1、行处理

删除文件中包含关键词的行

带中文

删除匹配“月”的行

import re

lineList = []
matchPattern = re.compile(r'月')
file = open('D:\myLog.txt','r',encoding='UTF-8')  
while 1:
    line = file.readline()
    if not line:
        print("Read file End or Error")
        break
    elif matchPattern.search(line):
        pass
    else:
        lineList.append(line)
file.close()
file = open(r'D:\target.txt', 'w',encoding='UTF-8')
for i in lineList:
    file.write(i)
file.close()

---------------------------------

删除匹配“INVALID PARAMETER”的行

import re

list = []
matchPattern = re.compile(r'INVALID PARAMETER')
file = open('C:\hopeinsighFPGA.txt','r')  
while 1:
    line = file.readline()
    if not line:
        print("Read file End or Error")
        break
    elif matchPattern.search(line):
        pass
    else:
        list.append(line)
file.close()
file = open(r'C:\target.txt', 'w')
for i in list:
    file.write(i)
file.close()



python:删除文件中包含关键词的行_播种生活的博客-CSDN博客

re.compile(),正则表达式在模式匹配前进行预编译;使用预编译代码比字符串快;

test.txt中包含以下文字:

1:li

2:test

3:num

在运行完程序,生成的target.txt中,内容为

1:li

3:num

删除TXT中的带/不带指定字符的行(并保留带指定字符的行)

#!/bin/env python
import shutil, sys, os
noneed = ["null"]
need = ['{']

def isInArray (array, line):
  for item in array:
    if item in line:
      return True
  return False

fname   = r'D:\download.json'
fresult = r'D:\download2.json'
#open(fname, 'r', encoding='gb2312')
with open(fname, 'r',encoding='UTF-8') as f:
    with open(fresult, 'w', encoding='UTF-8') as g:
        for line in f.readlines():
            if isInArray(need, line):#含need里面字符的行 都要
                g.write(line)
                continue
            if not isInArray(noneed, line):#不含noneed里面字符的行 都要
                g.write(line)

删除匹配or不匹配某些条件的行

程序框架:

f = open("test.txt",'r+')
lines = [line for line in f.readlines() if 你对line的判断 is None]
f.seek(0)
f.truncate(0)
f.writelines(lines)
f.close()

示例:

删除包含有 darray 内的内容的行

#!/bin/env python
import shutil, sys, os
darray = [
  "Entering directory",
  "In function ",
  "Leaving directory",
  "__NR_SYSCALL_BASE",
  "arm-hisiv100-linux-ar ",
  "arm-hisiv100-linux-gcc ",
  "but argument is of type",
  "dereferencing type-punned pointer will break strict-aliasing rules",
  "differ in signedness",
  "does break strict-aliasing rules",
  "embedded '\\0' in format",
  "excess elements in array initializer",
  "implicit declaration of",
  "make -C ",
  " rm -f",
  "this is the location of the previous definition",
  "warning: multi-line comment"
]

def isInArray (array, line):
  for item in array:
    if item in line:
      return True
  return False

fname   = r'C:\Users\YOGA\Desktop\download.json'
fresult = r'C:\Users\YOGA\Desktop\download2.json'

with open(fname, 'r', encoding='UTF-8') as f:
    with open(fresult, 'w', encoding='UTF-8') as g:
        for line in f.readlines():
            if not isInArray(darray, line):
                g.write(line)

Python实现删除文件中含“指定内容”的行示例
#!/bin/env python
import shutil, sys, os
darray = [
  "null",
]
def isInArray (array, line):
    for item in array:
        if item in line:
            return True
    return False
if __name__ == '__main__':
    argv = sys.argv
    argc = len(argv)
    if argc < 2:
        print("Usage: %s <file>" %(os.path.basename(argv[0])))
        exit()
    fname = argv[1]
    fresult = fname + ".result"
with open(fname, 'r', encoding='UTF-8') as f:
    with open(fresult, 'w', encoding='UTF-8') as g:
        for line in f.readlines():
            if not isInArray(darray, line):
                g.write(line)

原文:https://www.jb51.net/article/115779.htm

2、字符处理

删除特定字符

1.1、删除特定位置的字符

使用.pop()方法。输入参数,即为要删除的索引。

删除第二个字符

string = '公众号:土堆碎念'
list_str = list(string)
list_str.pop(1)
list_str = ''.join(list_str)
print(list_str)

1.2、删除指定字符

.replace()方法

比如,字符串a='公众号公众号:土堆碎念',尝试将其中的字符删除,将字符替换成空字符。

a= '公众号:土堆碎念'
b = a.replace('公','')

count参数就可以指定要替换几个。我们无意中知道了如何删除指定数目的字符。

比如,字符串a='公公众号公:土堆碎念',尝试将其中的字符删除,将字符替换成空字符。

a='公公众号公:土堆碎念'
b = a.replace('公','',3)
b

Out[38]:'众号:土堆碎念'

b = a.replace('公','',2)
b

Out[38]:'众号:土堆碎念'

import re

lineList = []
file = open('D:\mylog2.txt','r',encoding='UTF-8')  
while 1:
    line = file.readline()
    if not line:        
        print("Read file End or Error")        
        break
    line2 = line.replace('篇','')
    lineList.append(line2)
    
file.close()
file = open(r'D:\target3.txt', 'w',encoding='UTF-8')
for i in lineList:
    file.write(i)
file.close()

1.3、删除每一行首/尾匹配条件的字符

path = r'D:\code.txt'
f = open(path,'r')
a = f.readlines()
f = open(path,'w')

for line_b in a:
    line_a = line_b.lstrip('0123456789')
    f.write(line_a)

f.close()

strip() 去除每行首和尾 匹配 括号中 字符列表内的某个字符的字符

lstrip() 去除每行首(左边)匹配 括号中 字符列表内的某个字符的字符

Python strip()方法 | 菜鸟教程

正则表达式

使用re.sub()方法,这个方法的功能更强大,可以替换特定模式的字符。

sub(pattern, repl, string, count=0, flags=0)

pattern代表指定的模式,这是强大的原因,如果简单点使用,只指定特定字符,就可以用'特定字符'来表示模式。

repl代表的是,需要替换成的字符,如果删除,就是替换成空字符。

string代表的是,需要被替换的字符串。

count是替换的次数。

import re
a='公众号公众号:土堆碎念'
re.sub('公','',a)

Out[45]:'众号众号:土堆碎念'

替换文件里的字符

#!/bin/env python
#the source content in text.txt is "testabc"
#the destination content in text.txt is "testdef"

#open the text file and get the content
f=open("text.txt","r")
content=f.read()
print content
#replace "abc" with "def"
content=content.replace("abc","def")
print content
f.close()
#write the destination content to text.txt
f=open('text.txt','w')
f.write(content)
f.close()

3、列处理

删除TXT中每一行前面的数字字符

import re
lineList = []
data = open(r'D:\mylog2.txt','r',encoding='UTF-8').readlines()
data = [re.sub('^\d+ |^\d+$', '', line.strip()) for line in data]
file = open(r'D:\target3.txt', 'w',encoding='UTF-8')  
for i in data:
    file.write('\n'+i)
file.close()
# 读取源文件的全部内容
# 操作完成后,data是以行为单元的列表
data = open(r'D:\mylog2.txt','r',encoding='UTF-8').readlines()
# 迭代data处理每一行:去掉行首尾空白字符后正则替换行首的数字和数字后面的空格(如果有的话)
# 操作完成后,data依旧是行为单元的列表
data = [re.sub('^\d+ |^\d+$', '', line.strip()) for line in data]  
# 写结果文件,注意:会覆盖原始文件
with open(r'D:\mylog2.txt', 'w',encoding='UTF-8') as out:
    out.write('\n'.join(data))

删除csv文件中的某几列

import pandas as pd
df=pd.read_csv('D:\qq.csv', header=None)
df=df.drop([0,1],axis=1) #按列的位置

df=df.drop([‘colname1’,‘colname2’],axis=1) #按列名称
df

中文

import pandas as pd
df=pd.read_csv('D:\qq.csv', header=None,encoding='gbk')
df=df.drop([0,1],axis=1)
df



读取txt文件并取其某一列数据

菜鸟笔记1
首先读取的txt文件如下:


AAAAF110 0003E818 0003E1FC 0003E770 0003FFFC 90
AAAAF110 0003E824 0003E208 0003E76C 0003FFFC A5
AAAAF110 0003E814 0003E204 0003E760 0003FFFC 85
AAAAF110 0003E7F0 0003E208 0003E764 0003FFFC 68
AAAAF110 0003E7CC 0003E1FC 0003E758 0003FFFC 2B

现在要读取其每行的第3个数据,将其组成一个数组,代码如下:

import codecs

f = codecs.open('data.txt', mode='r', encoding='utf-8')  # 打开txt文件,以‘utf-8’编码读取
line = f.readline()   # 以行的形式进行读取文件
list1 = []
while line:
    a = line.split()
    b = a[2:3]   # 这是选取需要读取的位数
    list1.append(b)  # 将其添加在列表之中
    line = f.readline()
f.close()

for i in list1:
    print(i)

输出结果为:

['0003E1FC']
['0003E208']
['0003E204']
['0003E208']
['0003E1FC']

原文链接:https://blog.csdn.net/qq_38984928/article/details/82998151

删除TXT中的某列

方法1:

python代码如下:


file = open("pip list.txt", "r")  # 以只读模式读取文件

lines = []

for i in file:

    lines.append(i)  # 逐行将文本存入列表lines中

file.close()

new = []

for line in lines:  # 逐行遍历

    p = 0  # 定义计数指针

    for bit in line:  # 对每行进行逐个字遍历

        if bit == " ":  # 遇到空格时进行处理

            new.append(line[0:p])  # 将line中的0:p字段存入新列表new中,用于写入新的.txt中

            break  # 处理完一行后跳出当前循环

        else:

            p = p + 1  # 如果bit不是空格,指针加一

 

# 以写的方式打开文件,如果文件不存在,就会自动创建,如果存在就会覆盖原文件

file_write_obj = open("pip list new.txt", 'w')

for var in new:

    file_write_obj.writelines(var)

    file_write_obj.writelines('\n')

file_write_obj.close()

处理前:                                                                          处理后:

               
               

用Python处理文本——删除.txt每行中的不必要字符_LCCFlccf的博客-CSDN博客_python删除文本中的字符

方法2:

txt---->df----->drop列

读取TXT中的列到excel中

Python处理txt数据实例:Python处理txt数据实例_hust_a的博客-CSDN博客_python 处理txt数据

 将数字大小在9.500到12.500之间的行保留


将数据内数字大小在9.500到12.500之间的行保留,
将数据内数字小于9.500和大于12.500的行删除,

 def chuli(infile,outfile):
    fp = open(infile,'r')
    fout = open(outfile,'w')
    for line in fp.readlines():
        line = line.strip()
        if not line:
            continue
        num1 = float(line.split(' ')[1].split(',')[0])
        num2 = float(line.split(' ')[2])
        if (num1>=9.5 and num1<=12.5) and (num2>=9.5 and num2 <=12.5):
            fout.write('%s\n' % line)
    fp.close()
    fout.close()
if __name__ == '__main__':
    infile = './111.txt'
    outfile = './222.txt'
    chuli(infile,outfile)

更多:python命令删除文本文档中含有特定字符的行-Python-CSDN问答 

4、报错记录

 注意编码不一致时常见报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 205: illegal multibyte sequence

解决办法:

解决办法1.
  
FILE_OBJECT= open('order.log','r', encoding='UTF-8')
解决办法2.
  
FILE_OBJECT= open('order.log','rb')

@UESTC内容实时更新,本文连接:【python】文本处理:删除包含关键词的行、删除指定列、删除指定字符、替换关键字……_bandaoyu的博客-CSDN博客_删除含有关键字的行

猜你喜欢

转载自blog.csdn.net/bandaoyu/article/details/84990513#comments_20631177
今日推荐