Открывайте и читайте только файлы каталога внутри каталога - PullRequest
0 голосов
/ 08 декабря 2018

Вот мой новый код.По какой-то причине он дает ошибку, указанную ниже.Кто-нибудь знает, почему это может быть?Или какой-нибудь метод, который я мог бы использовать, чтобы обойти эту проблему?

Новый код:

import glob
import re

folder_path = "/home/"
file_pattern = "/**/*"
folder_contents = glob.glob(folder_path + file_pattern, recursive=True)

#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:
    read_file = open(file, 'rt').read()
    if regex1.findall(read_file) or regex2.findall(read_file):

        email = regex1.findall(read_file)
        phone=regex2.findall(read_file)

        match_list.append(file)
        print (file)
        print (email)

Ниже приведена ошибка, которую я получаю:

/home//sample.txt
['bcbs@aol.com', 'James@aol.com']
---------------------------------------------------------------------------
UnicodeDecodeError                        Traceback (most recent call last)
<ipython-input-44-6281ab1fc0ff> in <module>()
     15 
     16 for file in folder_contents:
---> 17     read_file = open(file, 'rt').read()
     18     if regex1.findall(read_file) or regex2.findall(read_file):
     19 

/jupyterhub_env/lib/python3.5/codecs.py in decode(self, input, final)
    319         # decode input (taking the buffer into account)
    320         data = self.buffer + input
--> 321         (result, consumed) = self._buffer_decode(data, self.errors, final)
    322         # keep undecoded input until the next call
    323         self.buffer = data[consumed:]

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc7 in position 10: invalid continuation byte

Нужно ли мнедобавить оператор if else для указания типа файла или ..............................................................................................................................................................................................................................................

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

Ваш файл явно не находится в кодировке, которую обнаруживает Python.Ваша локаль ищет данные UTF-8, но похоже, что файл находится в какой-то другой кодировке.Предполагая, что вы в основном работаете над английскими языками, пара хороших предположений будет cp1252 и latin-1;попробуйте передать encoding='cp1252' на open вызов и посмотреть, работает ли он.latin-1 никогда не подведет, но это может привести к бреду, в то время как машины с Windows часто выдают cp1252 данные, что делает правильное предположение.

0 голосов
/ 08 декабря 2018

Модуль glob позволяет это, указав recursive=True:

folder_path = "/home/e136320"
file_pattern = "/**/*"
folder_contents = glob.glob(folder_path + file_pattern, recursive=True)
...