最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python如何匹配文本并在其上一行追加文本

 更新時(shí)間:2022年05月10日 14:26:15   作者:XerCis  
這篇文章主要介紹了Python如何匹配文本并在其上一行追加文本,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

匹配文本并在其上一行追加文本

問題描述

Python匹配文本并在其上一行追加文本

test.txt

a
b
c
d
e

1.讀進(jìn)列表后覆蓋原文件 

def match_then_insert(filename, match, content):
? ? """匹配后在該行追加
? ? :param filename: 要操作的文件
? ? :param match: 匹配內(nèi)容
? ? :param content: 追加內(nèi)容
? ? """
? ? lines = open(filename).read().splitlines()
? ? index = lines.index(match)
? ? lines.insert(index, content)
? ? open(filename, mode='w').write('\n'.join(lines))
match_then_insert('test.txt', match='c', content='123')

效果

a
b
123
c
d
e

2.FileInput類

from fileinput import FileInput
def match_then_insert(filename, match, content):
? ? """匹配后在該行追加
? ? :param filename: 要操作的文件
? ? :param match: 匹配內(nèi)容
? ? :param content: 追加內(nèi)容
? ? """
? ? for line in FileInput(filename, inplace=True): ?# 原地過濾
? ? ? ? if match in line:
? ? ? ? ? ? line = content + '\n' + line
? ? ? ? print(line, end='') ?# 輸出重定向到原文件
match_then_insert('test.txt', match='c', content='123')

3.seek

def match_then_insert(filename, match, content):
? ? """匹配后在該行追加
? ? :param filename: 要操作的文件
? ? :param match: 匹配內(nèi)容
? ? :param content: 追加內(nèi)容
? ? """
? ? with open(filename, mode='rb+') as f:
? ? ? ? while True:
? ? ? ? ? ? try:
? ? ? ? ? ? ? ? line = f.readline() ?# 逐行讀取
? ? ? ? ? ? except IndexError: ?# 超出范圍則退出
? ? ? ? ? ? ? ? break
? ? ? ? ? ? line_str = line.decode().splitlines()[0]
? ? ? ? ? ? if line_str == match:
? ? ? ? ? ? ? ? f.seek(-len(line), 1) ?# 光標(biāo)移動(dòng)到上一行
? ? ? ? ? ? ? ? rest = f.read() ?# 讀取余下內(nèi)容
? ? ? ? ? ? ? ? f.seek(-len(rest), 1) ?# 光標(biāo)移動(dòng)回原位置
? ? ? ? ? ? ? ? f.truncate() ?# 刪除余下內(nèi)容
? ? ? ? ? ? ? ? content = content + '\n'
? ? ? ? ? ? ? ? f.write(content.encode()) ?# 插入指定內(nèi)容
? ? ? ? ? ? ? ? f.write(rest) ?# 還原余下內(nèi)容
? ? ? ? ? ? ? ? break
match_then_insert('test.txt', match='c', content='123')

對(duì)比

方案耗時(shí)/s
讀進(jìn)列表后覆蓋原文件54.42
FileInput類121.59
seek3.53
from timeit import timeit
from fileinput import FileInput
def init_txt():
    open('test.txt', mode='w').write('\n'.join(['a', 'b', 'c', 'd', 'e']))
def f1(filename='test.txt', match='c', content='123'):
    lines = open(filename).read().splitlines()
    index = lines.index(match)
    lines.insert(index, content)
    open(filename, mode='w').write('\n'.join(lines))
def f2(filename='test.txt', match='c', content='123'):
    for line in FileInput(filename, inplace=True):
        if match in line:
            line = content + '\n' + line
        print(line, end='')
def f3(filename='test.txt', match='c', content='123'):
    with open(filename, mode='rb+') as f:
        while True:
            try:
                line = f.readline()
            except IndexError:
                break
            line_str = line.decode().splitlines()[0]
            if line_str == match:
                f.seek(-len(line), 1)
                rest = f.read()
                f.seek(-len(rest), 1)
                f.truncate()
                content = content + '\n'
                f.write(content.encode())
                f.write(rest)
                break
init_txt()
print(timeit(f1, number=1000))
init_txt()
print(timeit(f2, number=1000))
init_txt()
print(timeit(f3, number=1000))

遇到的坑

報(bào)錯(cuò)可試試在文件頭部添加

# -*- coding: utf-8 -*-

或指定 encoding='utf-8'

用正則表達(dá)式匹配文本(Python經(jīng)典編程案例)

ceshi.txt文本如下:第一行為空行

爬蟲任務(wù)報(bào)警
01:45:21
scrapyd==》爬蟲任務(wù)異常死亡報(bào)警
hostname: scrapyd-chinabond-1
error_count: Process died: exitstatus=None ,project: chinabond_fast_spider,spider: ah_sina_com_cn,job: 28395818dbcb11e998a3f632d94e247c,pid: 88971,log: data/logs/chinabond_fast_spider/ah_sina_com_cn/28395818dbcb11e998a3f632d94e247c.log,items: None
error_data:
爬蟲任務(wù)報(bào)警
01:45:21
scrapyd==》爬蟲任務(wù)異常死亡報(bào)警
hostname: scrapyd-chinabond-6
error_count: Process died: exitstatus=None ,project: chinabond_fast_spider,spider: shupeidian_bjx_com_cn,job: 04738a5cdbcb11e9803172286b76aa73,pid: 34246,log: data/logs/chinabond_fast_spider/shupeidian_bjx_com_cn/04738a5cdbcb11e9803172286b76aa73.log,items: None
error_data:
爬蟲任務(wù)報(bào)警
01:45:21
scrapyd==》爬蟲任務(wù)異常死亡報(bào)警
hostname: scrapyd-chinabond-6
error_count: Process died: exitstatus=None ,project: chinabond_fast_spider,spider: news_sdchina_com,job: 28e8db4edbcb11e9803172286b76aa73,pid: 34324,log: data/logs/chinabond_fast_spider/news_sdchina_com/28e8db4edbcb11e9803172286b76aa73.log,items: None
error_data:
爬蟲任務(wù)報(bào)警
01:47:20
scrapyd==》爬蟲任務(wù)異常死亡報(bào)警
hostname: scrapyd-chinabond-0
error_count: Process died: exitstatus=None ,project: chinabond_fast_spider,spider: hq_smm_cn,job: 4bdc3af6dbcb11e9a45522b8c8b2a9e4,pid: 111593,log: data/logs/chinabond_fast_spider/hq_smm_cn/4bdc3af6dbcb11e9a45522b8c8b2a9e4.log,items: None
error_data:
爬蟲任務(wù)報(bào)警
01:47:21
scrapyd==》爬蟲任務(wù)異常死亡報(bào)警
hostname: scrapyd-chinabond-6
error_count: Process died: exitstatus=None ,project: chinabond_fast_spider,spider: sichuan_scol_com_cn,job: 71321c4edbcb11e9803172286b76aa73,pid: 34461,log: data/logs/chinabond_fast_spider/sichuan_scol_com_cn/71321c4edbcb11e9803172286b76aa73.log,items: None
error_data:
爬蟲任務(wù)報(bào)警
01:47:21
scrapyd==》爬蟲任務(wù)異常死亡報(bào)警
hostname: scrapyd-chinabond-2
error_count: Process died: exitstatus=None ,project: chinabond_fast_spider,spider: www_mof_gov_cn,job: 7418dacedbcb11e9b15e02034af50b6e,pid: 65326,log: data/logs/chinabond_fast_spider/www_mof_gov_cn/7418dacedbcb11e9b15e02034af50b6e.log,items: None
error_data:
爬蟲任務(wù)報(bào)警
01:47:21
scrapyd==》爬蟲任務(wù)異常死亡報(bào)警
hostname: scrapyd-chinabond-5
error_count: Process died: exitstatus=None ,project: chinabond_fast_spider,spider: www_funxun_com,job: 4dcda7a0dbcb11e980a8862f09ca6d70,pid: 27785,log: data/logs/chinabond_fast_spider/www_funxun_com/4dcda7a0dbcb11e980a8862f09ca6d70.log,items: None
error_data:
爬蟲任務(wù)報(bào)警
01:49:21
scrapyd==》爬蟲任務(wù)異常死亡報(bào)警
hostname: scrapyd-chinabond-4
error_count: Process died: exitstatus=None ,project: chinabond_fast_spider,spider: shuidian_bjx_com_cn,job: 95090682dbcb11e9a0fade28e59e3773,pid: 106424,log: data/logs/chinabond_fast_spider/shuidian_bjx_com_cn/95090682dbcb11e9a0fade28e59e3773.log,items: None
error_data:
爬蟲任務(wù)報(bào)警
01:51:20
scrapyd==》爬蟲任務(wù)異常死亡報(bào)警
hostname: scrapyd-chinabond-0
error_count: Process died: exitstatus=None ,project: chinabond_fast_spider,spider: tech_sina_com_cn,job: de4bdf72dbcb11e9a45522b8c8b2a9e4,pid: 111685,log: data/logs/chinabond_fast_spider/tech_sina_com_cn/de4bdf72dbcb11e9a45522b8c8b2a9e4.log,items: None
error_data:
爬蟲任務(wù)報(bào)警
01:51:21
scrapyd==》爬蟲任務(wù)異常死亡報(bào)警
hostname: scrapyd-chinabond-6
error_count: Process died: exitstatus=None ,project: chinabond_fast_spider,spider: ee_ofweek_com,job: ff6bd5b8dbcb11e9803172286b76aa73,pid: 34626,log: data/logs/chinabond_fast_spider/ee_ofweek_com/ff6bd5b8dbcb11e9803172286b76aa73.log,items: None
error_data:
爬蟲任務(wù)報(bào)警
01:51:21
scrapyd==》爬蟲任務(wù)異常死亡報(bào)警
hostname: scrapyd-chinabond-6
error_count: Process died: exitstatus=None ,project: chinabond_fast_spider,spider: house_hexun_com,job: ff6dfdacdbcb11e9803172286b76aa73,pid: 34633,log: data/logs/chinabond_fast_spider/house_hexun_com/ff6dfdacdbcb11e9803172286b76aa73.log,items: None
error_data:
爬蟲任務(wù)報(bào)警
01:51:21
scrapyd==》爬蟲任務(wù)異常死亡報(bào)警
hostname: scrapyd-chinabond-2
error_count: Process died: exitstatus=None ,project: chinabond_fast_spider,spider: www_sjfzxm_com,job: 018e7d78dbcc11e9b15e02034af50b6e,pid: 65492,log: data/logs/chinabond_fast_spider/www_sjfzxm_com/018e7d78dbcc11e9b15e02034af50b6e.log,items: None
error_data:
爬蟲任務(wù)報(bào)警
01:53:21
scrapyd==》爬蟲任務(wù)異常死亡報(bào)警
hostname: scrapyd-chinabond-4
error_count: Process died: exitstatus=None ,project: chinabond_fast_spider,spider: news_xianzhaiwang_cn,job: 48d835e8dbcc11e9a0fade28e59e3773,pid: 106476,log: data/logs/chinabond_fast_spider/news_xianzhaiwang_cn/48d835e8dbcc11e9a0fade28e59e3773.log,items: None
error_data:

代碼如下:

import os
import re
import json
from collections import namedtuple
alert = namedtuple('Spider_Alert', 'alert_time, alert_hostname, alert_project, alert_spider')
path = r'D:\data\ceshi.txt'
g_path = r'D:\data\\'
file_name = r'result.txt'
file_path = g_path + file_name
alerts_list = list()
with open(path, encoding="utf-8") as file:
    lines = file.readlines()  # 讀取每一行
    count = 0
    time = None
    hostname = None
    project = None
    for line in lines:
        if re.search(r'^\d{2}:\d{2}:\d{2}\s*$', line):
            time = re.search(r'^(\d{2}:\d{2}:\d{2})\s*$', line).group(1)
        if re.search(r'^hostname:\s*(.+)', line):
            hostname = re.search(r'^hostname:\s*(.+)', line).group(1)
        if re.search(r'project:\s*([^,]+),', line):
            project = re.search(r'project:\s*([^,]+),', line).group(1)
        if re.search(r'spider:\s*([^,]+),', line):
            spider = re.search(r'spider:\s*([^,]+),', line).group(1)
        if re.search(r'^error_data', line):
            spider_alert = None
            spider_alert = alert(alert_time=time, alert_hostname=hostname, alert_project=project, alert_spider=spider)
            alerts_list.append(spider_alert)
for element in alerts_list:
    print(element[0], element[1], element[3])
    with open(file_path, 'a', encoding="utf-8") as file:
        file.write(element[0] + "\t" + element[1] + "\t" + element[3])
        file.write(' \n')

執(zhí)行結(jié)果如下圖:

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python趣味入門教程之循環(huán)語句while

    Python趣味入門教程之循環(huán)語句while

    這篇文章主要給大家介紹了關(guān)于Python趣味入門教程之循環(huán)語句while的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Python判斷空的五種方法

    Python判斷空的五種方法

    本文介紹了多種在Python中判斷變量是否為空的方法,包括if語句、len()函數(shù)、not關(guān)鍵字、bool()函數(shù)和try...except語句等,具有一檔的參考價(jià)值,感興趣的可以了解一下
    2024-12-12
  • Python格式化輸出之format用法詳解

    Python格式化輸出之format用法詳解

    Python中格式化字符串目前有兩種陣營(yíng):%和format,這篇文章主要給大家介紹了關(guān)于Python格式化輸出之format用法的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-01-01
  • pycharm訪問mysql數(shù)據(jù)庫(kù)的方法步驟

    pycharm訪問mysql數(shù)據(jù)庫(kù)的方法步驟

    這篇文章主要介紹了pycharm訪問mysql數(shù)據(jù)庫(kù)的方法步驟。文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Keras loss函數(shù)剖析

    Keras loss函數(shù)剖析

    這篇文章主要介紹了Keras loss函數(shù)剖析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • 利用python/R語言繪制圣誕樹實(shí)例代碼

    利用python/R語言繪制圣誕樹實(shí)例代碼

    圣誕節(jié)快到了,分別用R和Python繪制了圣誕樹祝你們圣誕節(jié)快樂,所以下面這篇文章主要給大家介紹了關(guān)于如何利用python/R繪制圣誕樹的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • Python?NumPy教程之?dāng)?shù)組的基本操作詳解

    Python?NumPy教程之?dāng)?shù)組的基本操作詳解

    Numpy?中的數(shù)組是一個(gè)元素表(通常是數(shù)字),所有元素類型相同,由正整數(shù)元組索引。本文將通過一些示例詳細(xì)講一下NumPy中數(shù)組的一些基本操作,需要的可以參考一下
    2022-08-08
  • Python fileinput模塊如何逐行讀取多個(gè)文件

    Python fileinput模塊如何逐行讀取多個(gè)文件

    這篇文章主要介紹了Python fileinput模塊如何逐行讀取多個(gè)文件,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Python編寫一個(gè)多線程的12306搶票程序的示例

    Python編寫一個(gè)多線程的12306搶票程序的示例

    對(duì)于很多人來說,搶購(gòu)火車票人們成了一個(gè)令人頭疼的問題,本文主要介紹了Python編寫一個(gè)多線程的12306搶票程序的示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • Python科學(xué)畫圖代碼分享

    Python科學(xué)畫圖代碼分享

    這篇文章主要介紹了Python科學(xué)畫圖代碼分享,涉及matplotlib庫(kù)的簡(jiǎn)單介紹,分享了matplotlib繪圖庫(kù)書籍的下載地址,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11

最新評(píng)論

青川县| 喜德县| 普兰店市| 屏东县| 调兵山市| 汶川县| 桦南县| 吉木萨尔县| 潼关县| 西峡县| 客服| 江川县| 新野县| 长武县| 西平县| 定州市| 新龙县| 秦安县| 灵璧县| 梁山县| 鹤庆县| 石景山区| 青川县| 湄潭县| 秦安县| 察隅县| 盖州市| 象山县| 保德县| 客服| 山西省| 融水| 大荔县| 新乡县| 铜山县| 乌什县| 都匀市| 习水县| 兴文县| 兖州市| 利辛县|