2016-08-18 2 views
-1

Im работает следующий код, и я хочу пропустить 3 папки с соответствующими именами: folder1, folder2, .repository.Пропустить каталоги в поиске в Python

Однако, если некоторые из папок нет я получаю сообщение об ошибке:

indentationerror: Unindent не совпадает ни с внешнего уровня отступа

Как искать пропуск, что папки, и даже если они не являются присутствовать не получится ошибка? Вот мой код:

import re 
import os 
from os.path import join 
comment=re.compile(r"<!--\s+\| Start of user code \(user defined modules\)\s+\|-->\s+<!--\s+\| End of user code\s+\|-->", re.MULTILINE) 
tag="<module>" 

for root, dirs, files in os.walk("."): 
    dirs.remove("folder1") 
    dirs.remove("folder2") 
    dirs.remove(".repo") 
    if "pom.xml" in files: 
     p=join(root, "pom.xml") 
     print("Checking",p) 
     with open(p) as f: 
      s=f.read() 
     if tag in s and comment.search(s): 
      print("The following file has been modified",p) 

------ ОБНОВЛЕНИЕ:

import re 
import os 
from os.path import join 
comment=re.compile(r"<!--\s+\| Start of user code \(user defined modules\)\s+\|-->\s+<!--\s+\| End of user code\s+\|-->", re.MULTILINE) 
tag="<module>" 

for root, dirs, files in os.walk("/home/temp/"): 
dirs.remove("/home/temp/test1") 
dirs.remove("/home/temp/test2") 
dirs.remove("/home/temp/test3") 

     if "pom.xml" in files: 
     p=join(root, "pom.xml") 
     print("Checking",p) 
     with open(p) as f: 
      s=f.read() 
     if tag in s and comment.search(s): 
      print("The following file contains user code modules:-------------> ",p) 

А вот выход:

python /home/temp/test_folder/python_script_4.py 
    File "/home/temp/test_folder/python_script_4.py", line 12 
    if "pom.xml" in files: 
    ^
IndentationError: unexpected indent 

LAST UPDATE --------->

import re 
import os 
from os.path import join 
comment=re.compile(r"<!--\s+\| Start of user code \(user defined modules\)\s+\|-->\s+<!--\s+\| End of user code\s+\|-->", re.MULTILINE) 
tag="<module>" 

for root, dirs, files in os.walk("/home/dlopez/temp/test_folder/"): 
dirs.remove("/home/temp/test_folder/test1") 
dirs.remove("/home/temp/test_folder/test2") 
dirs.remove("/home/temp/test_folder/test3") 

if "pom.xml" in files: 
    p=join(root, "pom.xml") 
    print("Checking",p) 
    with open(p) as f: 
     s=f.read() 
     if tag in s and comment.search(s): 
      print("The following file contains user code modules:-------------> ",p) 

И мой выход:

python /home/temp/test_folder/python_script_5.py 
Traceback (most recent call last): 
    File "/home/dlopez/temp/test_folder/python_script_5.py", line 8, in <module> 
    dirs.remove("/home/temp/test_folder/test1") 
ValueError: list.remove(x): x not in list 

Помогите, пожалуйста, спасибо! :)

+0

Additonally я получаю эту ошибку в последнее время, даже если папка существует: IndentationError: ожидается блок с отступом – user2961008

+1

Эта ошибка не связана с вашим вопросом. Вы уверены, что отпечатки верны в файле? – dunder

+0

Ошибка не связана с вашим вопросом, ошибка связана только с вашим отступом – danielfranca

ответ

0

Ваш отступ, если не соответствуют текущим отступам

import re 
import os 
from os.path import join 
comment=re.compile(r"<!--\s+\| Start of user code \(user defined modules\)\s+\|-->\s+<!--\s+\| End of user code\s+\|-->", re.MULTILINE) 
tag="<module>" 

for root, dirs, files in os.walk("/home/dlopez/temp/"): 
dirs.remove("/home/dlopez/temp/test1") 
dirs.remove("/home/dlopez/temp/test2") 
dirs.remove("/home/dlopez/temp/test3") 

     if "pom.xml" in files: # The if statement is not aligned to anything 
     p=join(root, "pom.xml") 
     print("Checking",p) 
     with open(p) as f: 
      s=f.read() 
     if tag in s and comment.search(s): 
      print("The following file contains user code modules:-------------> ",p) 

изменить его на:

import re 
import os 
from os.path import join 
comment=re.compile(r"<!--\s+\| Start of user code \(user defined modules\)\s+\|-->\s+<!--\s+\| End of user code\s+\|-->", re.MULTILINE) 
tag="<module>" 

for root, dirs, files in os.walk("/home/dlopez/temp/"): 
    # Skip the dirs you want looping a list 
    for skipped in ("/home/dlopez/temp/test1", "/home/dlopez/temp/test1", "/home/dlopez/temp/test3"): 
     if skipped in dirs: dirs.remove(skipped) 

    if "pom.xml" in files: 
     p=join(root, "pom.xml") 
     print("Checking",p) 
     with open(p) as f: 
      s=f.read() 
      if tag in s and comment.search(s): 
       print("The following file contains user code modules:-------------> ",p) 
+2

Кроме того, не смешивайте вкладки и пробелы в коде. Используйте либо вкладки, либо пробелы предпочтительнее [в соответствии с PEP8] (https://www.python.org/dev/peps/pep-0008/#id17). –

+0

Кроме того, PEP8 рекомендуется использовать 4 пробела, что делает код способом mroe разборчивым. – Ian

+0

Пожалуйста, помогите в последнем обновлении, до сих пор неясно! Спасибо – user2961008