我正在尝试读取目录中的所有文件,并输出包含正则表达式的文件以及每个文件中的正则表达式。
import glob
import re
import PyPDF2
#-------------------------------------------------Input----------------------------------------------------------------------------------------------
folder_path = "/home/"
file_pattern = "/*"
folder_contents = glob.glob(folder_path + file_pattern)
#Search for Emails
regex1= re.compile(r'\S+@\S+')
#Search for Phone Numbers
regex2 = re.compile(r'\d\d\d[-]\d\d\d[-]\d\d\d\d')
match_list=[]
for file in folder_contents:
if re.search(r".*(?=pdf$)",file):
#this is pdf
with open(file, 'rb') as pdfFileObj:
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
pageObj = pdfReader.getPage(0)
content = pageObj.extractText()
read_file = open(file,'rb')
#print("{}".format(file))
elif re.search(r".*(?=csv$)",file):
#this is csv
with open(file,"r+",encoding="utf-8") as csv:
read_file = csv.read()
#print("{}".format(file))
elif re.search(r"/jupyter",file):
print("wow")
elif re.search(r"/scikit",file):
print("wow")
else:
read_file = open(file, 'rb').read()
#print("{}".format(file))
continue
if regex1.findall(read_file) or regex2.findall(read_file):
print(read_file)
我设法编写了以下代码,但出现以下错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-39-f614d35e0441> in <module>()
38 #print("{}".format(file))
39 continue
---> 40 if regex1.findall(read_file) or regex2.findall(read_file):
41 print(read_file)
TypeError: expected string or bytes-like object
有什么方法可以使它正常工作吗?
答案 0 :(得分:0)
用以下内容替换读取的文件代码:
with open(File, mode='rb') as file:
readFile = file.read()
答案 1 :(得分:0)
对于read()
,只有open(filename)
可以使用。只需替换为这个,您就可以解决问题。
read_file = open(file).read()
答案 2 :(得分:0)
首先,我向其他回答此问题的人表示歉意,因为我会说一些关于OP以前的问题。
关于OP,您不应无所顾忌地复制代码。
Content
是您已经阅读的页面。这意味着您的代码应为read_file = content
。以及为什么我写read_file = #
,因为我认为您会添加额外的代码。但它不应再次读取同一文件。
with open(file, 'rb') as pdfFileObj:
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
pageObj = pdfReader.getPage(0)
content = pageObj.extractText()
read_file = open(file,'rb')
#^---^---^ according to your former question, `read_file` should be `content`
并且还会出现其他问题。您应该在continue
之后添加print("wow")
。
elif re.search(r"/jupyter",file):
print("wow")
elif re.search(r"/scikit",file):
print("wow")
否则,您的代码将继续运行,然后发生错误。因为你什么都没读。
if regex1.findall(read_file) or regex2.findall(read_file):
print(read_file)