首页 > 解决方案 > 将预定义文本粘贴到 txt 文件中的特定行

问题描述

我正在尝试将包含多行的特定文本粘贴到包含在我的 D:\output 文件夹中的所有 .txt 文件中

我用这些代码列出了存储在我的输出文件夹下的所有 .txt 文件;

import os

myDir = 'D:\output'

# r=root, d=directories, f = files
for r, d, f in os.walk(myDir):
    for file in f:
        if ".txt" in file:
            print(os.path.join(r, file))

每个 .txt 文件都有一个如下所示的部分。我想把我的文本块放在这个下面。

!**********************************************************************
!  Global parameters
!**********************************************************************
.
.
.

这是我的多行文本块

searchpath (1) = '.'
gravity (1) = 0.0000000000000000E+00  ! Gravity
gravity (2) = 0.0000000000000000E+00  ! Gravity
gravity (3) = -9.8100000000000005E+00 ! Gravity
vehicle.startvel= 0.0000000000000000E+00  ! Vehicle initial velocity
vehicle.applystartvel= 0! Apply vehicle initial velocity at solver start

最后,我想让我的所有文件都像这样

!**********************************************************************
!  Global parameters
!**********************************************************************
searchpath (1) = '.'
gravity (1) = 0.0000000000000000E+00  ! Gravity
gravity (2) = 0.0000000000000000E+00  ! Gravity
gravity (3) = -9.8100000000000005E+00 ! Gravity
vehicle.startvel= 0.0000000000000000E+00  ! Vehicle initial velocity
vehicle.applystartvel= 0! Apply vehicle initial velocity at solver start
.
.
.

谁能帮助我如何用python完成?我是一个新手。

标签: pythonpython-3.x

解决方案


没有简单的方法可以编辑文本文件并在中间添加数据,因为它们是顺序的非索引文件。

常见的做法是新建一个临时文件,按照自己想要的方式重写整个txt,然后删除原文件,重命名新文件替换旧文件。

以下示例未经测试,请备份您的数据。

text_to_find = '''\
!**********************************************************************
!  Global parameters
!**********************************************************************
'''

block_to_add = '''\
searchpath (1) = '.'
gravity (1) = 0.0000000000000000E+00  ! Gravity
gravity (2) = 0.0000000000000000E+00  ! Gravity
gravity (3) = -9.8100000000000005E+00 ! Gravity
vehicle.startvel= 0.0000000000000000E+00  ! Vehicle initial velocity
vehicle.applystartvel= 0! Apply vehicle initial velocity at solver start
'''

import os

myDir = r'D:\output'

for path, dirs, files in os.walk(myDir):
    for filename in files:
        if filename.endswith('.txt'):
            fullname = os.path.join(path, filename)
            with open(fullname) as f:
                data = f.read() # read the entire file to memory
            pos = data.find(text_to_find)  #locate the text
            if pos != -1: # found, insert the block
                 pos += len(text_to_find)
                 data = data[:pos] + block_to_add + data[pos:]
                 with open(fullname, 'w') as f:
                     f.write(data)   # rewrite the entire file

推荐阅读