【问题标题】:Search for specific string in multiple excel files在多个excel文件中搜索特定字符串
【发布时间】:2018-01-03 20:53:04
【问题描述】:

我是 python 新手,所以请耐心等待。 我想制作一个在特定文件夹中的所有 excel 文件中搜索的脚本,以查看它们是否包含“@”符号。如果找到匹配项,则应使用 excel 文件的名称写入 log.txt 文件。我没有预先知道excel文件的名称。

到目前为止,我只停留在读取一个文件,如果找到字符串则返回 true。我得到的是

import pandas as pd

df = pd.read_excel(open('test.xlsx','rb'), sheetname=0)
print(df)

if '@' in df:
    print("true")
else:
    print("false")

这会正确返回 excel 文件中 sheet1 的内容,但查找匹配项的搜索似乎不起作用。有任何想法吗?也许我做错了。

【问题讨论】:

    标签: python excel python-3.x pandas


    【解决方案1】:

    您应该仔细阅读Pandas - Working with Text Data,特别是关于匹配或包含模式的字符串的部分。

    不幸的是,您无法使用核心 Python 常用的字符串方法搜索 DataFrame。相反,您将使用 StringMethod,如下所示:

    out = False
    for col in df.columns:
        if df[col].str.contains('@').any():
            out = 'True'
            break
    print(out)
    

    另外,我认为在使用pd.read_excel 时没有必要使用open。例如

    df = pd.read_excel(open('test.xlsx','rb'), sheetname=0)
    

    可以改写:

    df = pd.read_excel('test.xlsx', sheetname=0)
    

    至于遍历文件夹中的文件,请查看内置模块 glob

    【讨论】:

      【解决方案2】:

      这是一个不使用熊猫的答案

      import logging
      
      LOG_FILENAME = r'file_output_location_path\log.txt'
      logging.basicConfig(filename=LOG_FILENAME,
                          level=logging.WARNING,
                          format='%(asctime)s %(message)s'
                          )
      
      
      source_folder = r'excel_file_folder_path'
      
      def containsString():
          for somefile in os.listdir(source_folder):
              if'@' in somefile:
                  logging.warning(somefile)
      

      【讨论】:

      • 初学者问题:r'立场做什么? 'excel_file_folder_path' 应该是 './foldername' 吗?
      • Dosnt 似乎可以正常工作,它可以找到文件,但是当 xlsx 文件包含它时,它找不到任何@。
      猜你喜欢
      • 2012-09-28
      • 1970-01-01
      • 2011-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-17
      相关资源
      最近更新 更多