当前位置: 首页 > 面试题库 >

Python-递归查找和替换文本文件中字符串的方法

洪宇定
2023-03-14
问题内容

我想递归搜索带有文本文件子目录的目录,并用多行字符串的内容替换文件中每次出现的{$ replace}。如何用python实现?

[编辑]

到目前为止,我所拥有的只是使用os.walk的递归代码,以获取需要更改的文件列表。

import os
import sys
fileList = []
rootdir = "C:\\test"
for root, subFolders, files in os.walk(rootdir):
  if subFolders != ".svn":
    for file in files:
      fileParts = file.split('.')
      if len(fileParts) > 1:
        if fileParts[1] == "php":
          fileList.append(os.path.join(root,file))


print fileList

问题答案:

签出os.walk:

import os
replacement = """some
multi-line string"""
for dname, dirs, files in os.walk("some_dir"):
    for fname in files:
        fpath = os.path.join(dname, fname)
        with open(fpath) as f:
            s = f.read()
        s = s.replace("{$replace}", replacement)
        with open(fpath, "w") as f:
            f.write(s)

上面的解决方案有缺陷,例如实际上会打开它找到的每个文件,或者实际上将每个文件都读到内存中(如果您有1GB的文本文件,那就不好了),但这应该是一个好选择。初始点。

如果要执行比查找特定字符串更复杂的查找/替换操作,则可能还需要查看re模块。



 类似资料:
  • 我正在学习powershell,并尝试编写一个脚本,通过字符串查找目录中的文件,然后对找到的文件进行查找和替换。我想将文件列表存储为一个变量,然后循环遍历文件并替换特定的字符串。这是我的脚本和错误,如果你有任何想法,它将非常感谢。谢谢! 错误 Get-Content:无法将参数绑定到参数“path”,因为它为null。在C:\scripts\script.ps1:5 char:18+(Get-Co

  • 问题内容: 我有一个大约40万行的文本文件。我需要将此文本文件导入一个程序,该程序仅接受以空格或制表符分隔的文本文件,但是此文本文件以分号分隔。我要从(Arcmap)导出文本文件的程序中没有选项来更改分隔,并且在文本文件本身中进行查找和替换实际上需要2天。 我已经搜索了一个脚本来执行此操作,但是它们似乎都用空格替换了单词文件的整个LINE,而不是单独替换了每个分号,而给我留了一个空的文本文件。 这

  • 我试图使用这个递归函数来找到回文字符串,但是代码输出术语<code>alia

  • 我试图开发一个由多个数组和文本视图组成的应用程序,我遇到了一个问题。 我有3个文本视图和2个数组。 我的一个数组包含句子。我的第一个问题是如何突出每个句子中的特定单词?例如:“这是我的第一个数组项”,我需要突出显示字符串中的一个单词,这样当它显示在文本视图1中时,它就会像这样出现..."这是我的第一个数组物品" 我的另一个数组包含单词。它们显示在textview2中,也应高亮显示。我的下一个问题是

  • 问题内容: 我正在寻找一种替换文件中的字符串而不将整个文件读入内存的方法。通常我会使用Reader和Writer,例如以下内容: 但是,我想就地进行替换,并且不认为可以同时在同一文件上打开Reader和Writer。另外,我正在使用Java 1.4,因此无法访问NIO,扫描仪等。 谢谢唐 问题答案: 通常无法对文件进行“就地”替换,除非替换的长度与原始长度完全相同。否则,文件将需要增大,从而将所有

  • 问题内容: 我有一个名为log.txt的文本文件,它具有以下数据 第一个逗号之前的数字是指定每个项目的索引。 我想做的是读取文件,然后将给定行中字符串的一部分(例如textFiles / a.txt)替换为另一值(例如something / bob.txt)。 这就是我到目前为止 问题答案: 一种方法是使用: 您还可以使用正则表达式,或查找搜索字符串在一行中的何处。