我有这个文件,我希望能够在python文件结束之前编写文本n
行,我知道写方法是存在的,但是它只在文件的末尾插入文本。我想做这样的事情:
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。
发布于 2021-02-20 10:17:35
处理此问题的一种方法是将文件读入行列表中。插入您想要的位置的新行。然后将这一系列行写到一个新文件中。
如果您知道要插入的行号,则可以直接使用该位置。如果需要根据文件底部的行数计算行位置,则可以将行位置计算为总行数和N行数之间的差额。
可能是这样的:
# 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)
发布于 2021-02-20 10:09:00
如果您知道必须跳过多少行,从结尾开始,只需逐行拆分源文本,添加新文本,然后重新连接:
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)
否则,您可以为此使用正则表达式:
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)
这两种方法都将打印:
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
变量的内容覆盖输入文件(或创建一个新的文件),而不是打印它。
https://stackoverflow.com/questions/66294821
复制相似问题