【问题标题】:File edition after glob function through python通过python进行glob函数后的文件编辑
【发布时间】:2016-10-12 18:10:55
【问题描述】:

我想在不同目录下找到文件的每个实例,并在每个文件中搜索值 0 并将其替换为 500。

请在下面找到代码:

!/usr/bin/python

import glob 
import os


a = glob.glob('/home/*/hostresolve')

for i in a:
print i 

==================================

现在我在 home 下找到了 hostresolve 文件的所有实例。我想在每个文件中搜索值 0 并用值 500 替换它们。我知道python中有查找和替换功能,但我想知道我们如何使用它来输出我们通过glob获得的。

【问题讨论】:

    标签: linux python-2.7 scripting


    【解决方案1】:

    来自 [Python Docs] (https://docs.python.org/2/library/glob.html) glob.glob 返回一个列表。在您的情况下,它是目录中匹配文件的列表。因此,要替换所有文件中所需的文本,我们应该迭代列表。因此,代码将是

    import glob
    import os
    
    a = glob.glob('/home/*/host*')
    for files in a:
      with open(files, 'r') as writingfile:
        read_data = writingfile.read()
      with open(files, 'w') as writingfile:
        write_data = read_data.replace('0', '500')
        writingfile.write(write_data)
    

    另外使用“with”对文件数据进行操作也很有效,因为它会自动处理 close() 和 flush() 以避免多余的代码,并且在之前的答案 [1] (https://stackoverflow.com/a/17141572/6005652) 中已经提出了建议。

    为了进一步重用或提高效率,您可以参考地图 (https://docs.python.org/3/library/functions.html?highlight=map#map),因为文件列表是一个可迭代对象。

    据我了解,这足以回答您的问题。

    【讨论】:

    • @GowthamBalahandhiran python 可以在代码中使用正确的缩进。请检查第二个与声明的缩进。这意味着您在文件打开时正在读写..这不是我在代码中的意思..请检查
    • 嗨 Sachin 我纠正了缩进,但仍然是同样的问题
    • 从我的角度来看:如果文件的内容 2 正在更改而一个没有(具有相同的权限),那么请检查您的文件.. 文件中是否存在所需的字符串(要替换) .[我也试过用 4-5 个文件,但都变了].. 我想不出确切的问题。并且代码将 0 替换为 500。
    【解决方案2】:

    除了一件事,它起作用了

    代码适用于 2 和 3 实例的三个文件实例,但第一个实例文件保持不变。

    [root@localhost home]# cat /home/dir1/hostresolve 
    O
    [root@localhost home]# cat /home/dir2/hostresolve 
    500
    [root@localhost home]# cat /home/dir3/hostresolve 
    
    500
    

    请在下面找到代码:

    !/usr/bin/python
    
    import glob  
    import os
    
    
     a = glob.glob('/home/*/hostresolve')
    
    
         for files in a:
              print files
              with open(files, 'r') as writingfile:
              read_data = writingfile.read()
                 with open(files , 'w') as writingfile:
                      write_data = read_data.replace('0','500')
                      writingfile.write(write_data)
    

    但是当我打印文件时,我得到了文件的所有实例,这意味着 for 循环将处理所有 3 个实例并检查这些文件的权限,我发现所有 3 个都具有相同的权限

    【讨论】:

      猜你喜欢
      • 2011-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-10
      相关资源
      最近更新 更多