【问题标题】:Search multiple files in folder and sub folders python在文件夹和子文件夹python中搜索多个文件
【发布时间】:2021-04-07 04:46:49
【问题描述】:

尝试在当前文件夹和子文件夹的多个文件中搜索一个搜索词并将它们打印到一个文件中。

我可以使用 os.walk 打印出终端中的文件。但我想在文件夹中的所有文件中搜索特定单词

    import glob, os
    
   output_file = 'Funkar.txt'
search_str = '"Prefix"'

for root, dirs, files in os.walk("."):
    for file in files:
        if file.endswith(".wpp"):
             print(os.path.join(root, file))

        with  open(os.path.join(root, file), 'r') as fr, open (output_file,'a',  encoding='utf-8') as fw:
            for i,line in enumerate(fr):
                if line.find(search_str) != -1: 
                    fw.write(line)

现在给我

in decode
    return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 12: character maps to <undefined>

【问题讨论】:

  • 然后呢?你的问题是什么?这段代码有问题吗? (除了可能是错字的坏缩进?)
  • 每次调用open (output_file,'w'...) 都会覆盖文件中已有的任何内容。您很可能希望打开以附加 open (output_file,'a'...)
  • ...或者打开写before循环。您可能还需要执行open(os.path.join(root, file), 'r') 才能正确打开每个文件。 file 只是名称,相对于您的 cwd
  • 无法找出不好的缩进,我试图改变你所说的但无法让它工作,请告诉我如何? :)

标签: python


【解决方案1】:

搜索和打印:

import os
def search( folder, word ):
    for root, dirs, files in os.walk(folder):
        path = root.split(os.sep)
        for filename in files:
            fullname = os.path.join(root, filename)
            if open( fullname ).read().find( word ) != -1:
                print( fullname ) 

search( "FolderName", 'any text')

搜索和备份搜索到的行:

import os
def search( folder, word, bfile ):
    for root, dirs, files in os.walk(folder):
        path = root.split(os.sep)
        for filename in files:
            fullname = os.path.join(root, filename)
            if open( fullname ).read().find( word ) != -1:
                print( fullname ) 
                blines = [x for x in open(fullname).readlines() if x.find(word) != -1]
                open( bfile, 'a' ).writelines(blines) 

search( "FolderName", 'any text', 'backup-lines.file')

【讨论】:

  • 我觉得加两行没问题,不过我自己加
  • 你为什么坚持opening文件并在一行中阅读它们?这不是很惯用...只需打开并以正常循环阅读它们...
  • 我不是一个只想学习的程序员,这就是我有你们的原因:) 很好地尝试使用你的脚本,但无法获得输出文件。我没有收到任何错误,但我也没有收到任何错误。我不想指定文件夹名称,我只想搜索脚本当前所在文件夹中的所有子文件夹。
  • 另外我只想搜索以 .wpp 文件结尾的文件,文件夹中有很多文本,但我不希望它添加那些
猜你喜欢
  • 1970-01-01
  • 2017-02-12
  • 1970-01-01
  • 1970-01-01
  • 2013-01-08
  • 2015-08-04
  • 1970-01-01
  • 2022-01-17
相关资源
最近更新 更多