在多个excel文件中搜索特定字符串

时间:2018-01-03 20:53:05

标签: python excel python-3.x pandas

我是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的内容,但查找匹配的搜索似乎不起作用。有任何想法吗?也许我做错了。

2 个答案:

答案 0 :(得分: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。 E.g

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

可以改写:

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

就迭代文件夹中的文件而言,请查看内置模块glob

答案 1 :(得分:1)

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

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)