首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在文件结束前插入文本n行

在文件结束前插入文本n行
EN

Stack Overflow用户
提问于 2021-02-20 09:57:27
回答 2查看 657关注 0票数 0

我有这个文件,我希望能够在python文件结束之前编写文本n行,我知道写方法是存在的,但是它只在文件的末尾插入文本。我想做这样的事情:

代码语言:javascript
运行
AI代码解释
复制
INSERT INTO `mod238_yoast_seo_meta` VALUES("12749", "0", "0");
INSERT INTO `mod238_yoast_seo_meta` VALUES("12755", "0", "0");
INSERT INTO `mod238_yoast_seo_meta` VALUES("12757", "1", "0");
INSERT INTO `mod238_yoast_seo_meta` VALUES("12765", "1", "0");
INSERT INTO `mod238_yoast_seo_meta` VALUES("12774", "1", "0");
INSERT INTO `mod238_yoast_seo_meta` VALUES("12785", "1", "0");

/* I would like to be able to insert some text here with python/*

SET FOREIGN_KEY_CHECKS = 1; 

/* Duplicator WordPress Timestamp: 2021-01-08 15:49:50*/
/* DUPLICATOR_MYSQLDUMP_EOF */

/* DUPLICATOR_MYSQLDUMP_EOF */是文件的最后一行,非常感谢!此外,我还使用python3.8。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-20 10:17:35

处理此问题的一种方法是将文件读入行列表中。插入您想要的位置的新行。然后将这一系列行写到一个新文件中。

如果您知道要插入的行号,则可以直接使用该位置。如果需要根据文件底部的行数计算行位置,则可以将行位置计算为总行数和N行数之间的差额。

可能是这样的:

代码语言:javascript
运行
AI代码解释
复制
    # Insert text n lines before the end of file

    file_path = 'text.txt'
    line_to_insert = '/*this is my inserted line*/\n'
    lines_from_bottom = 4

    with open(file_path) as file:
        lines = file.readlines()
        insert_position = len(lines) - lines_from_bottom
        lines.insert(insert_position, line_to_insert)
        with open('new_file.txt', 'w') as new_file:
            for line in lines:
                new_file.write(line)
票数 0
EN

Stack Overflow用户

发布于 2021-02-20 10:09:00

如果您知道必须跳过多少行,从结尾开始,只需逐行拆分源文本,添加新文本,然后重新连接:

代码语言:javascript
运行
AI代码解释
复制
source_text = '''INSERT INTO `mod238_yoast_seo_meta` VALUES("12749", "0", "0");
INSERT INTO `mod238_yoast_seo_meta` VALUES("12755", "0", "0");
INSERT INTO `mod238_yoast_seo_meta` VALUES("12757", "1", "0");
INSERT INTO `mod238_yoast_seo_meta` VALUES("12765", "1", "0");
INSERT INTO `mod238_yoast_seo_meta` VALUES("12774", "1", "0");
INSERT INTO `mod238_yoast_seo_meta` VALUES("12785", "1", "0");

SET FOREIGN_KEY_CHECKS = 1; 

/* Duplicator WordPress Timestamp: 2021-01-08 15:49:50*/
/* DUPLICATOR_MYSQLDUMP_EOF */'''

custom_text = "my new cool text"
lines_before = 5 # you want to add the new text 5 lines before the end

lines = source_text.split('\n')
lines.insert(-lines_before, "\n" + custom_text)
new_text = "\n".join(lines)

print(new_text)

否则,您可以为此使用正则表达式:

代码语言:javascript
运行
AI代码解释
复制
import re

source_text = '''INSERT INTO `mod238_yoast_seo_meta` VALUES("12749", "0", "0");
INSERT INTO `mod238_yoast_seo_meta` VALUES("12755", "0", "0");
INSERT INTO `mod238_yoast_seo_meta` VALUES("12757", "1", "0");
INSERT INTO `mod238_yoast_seo_meta` VALUES("12765", "1", "0");
INSERT INTO `mod238_yoast_seo_meta` VALUES("12774", "1", "0");
INSERT INTO `mod238_yoast_seo_meta` VALUES("12785", "1", "0");

SET FOREIGN_KEY_CHECKS = 1; 

/* Duplicator WordPress Timestamp: 2021-01-08 15:49:50*/
/* DUPLICATOR_MYSQLDUMP_EOF */'''

custom_text = "my new cool text"
new_text = re.sub("\s+(?=SET FOREIGN_KEY_CHECKS)", "\n\n%s\n\n" % custom_text, source_text)

print(new_text)

这两种方法都将打印:

代码语言:javascript
运行
AI代码解释
复制
INSERT INTO `mod238_yoast_seo_meta` VALUES("12749", "0", "0");
INSERT INTO `mod238_yoast_seo_meta` VALUES("12755", "0", "0");
INSERT INTO `mod238_yoast_seo_meta` VALUES("12757", "1", "0");
INSERT INTO `mod238_yoast_seo_meta` VALUES("12765", "1", "0");
INSERT INTO `mod238_yoast_seo_meta` VALUES("12774", "1", "0");
INSERT INTO `mod238_yoast_seo_meta` VALUES("12785", "1", "0");

my new cool text

SET FOREIGN_KEY_CHECKS = 1;

/* Duplicator WordPress Timestamp: 2021-01-08 15:49:50*/
/* DUPLICATOR_MYSQLDUMP_EOF */

显然,您必须用new_text变量的内容覆盖输入文件(或创建一个新的文件),而不是打印它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66294821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文