Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите исправить ошибку в скрипте Python. Он должен был открывать папку по пути и проверять все txt файлы

Сашок Сашкин Ученик (50), на голосовании 2 месяца назад
Ошибка: File "C:\Users\Administrator\Downloads\find.py", line 10
if filename.endswith(".txt"):
^
IndentationError: expected an indented block after 'for' statement on line 8

скрипт:
import os

path = r"C:\Users\Administrator\Downloads\cookies2" # путь до папки
word = '_|WARNING:'
sp = []

for filename in os.listdir(path):
if filename.endswith(".txt"):
filepath = os.path.join(path, filename)

with open(filepath, 'r', encoding='utf-8') as file:
data = file.readlines()

for line in data:
if word in line:
sp.append(line[line.index(word)::])

print('Готово')
print(f'Скопировано {len(sp)} строк')

with open('result.txt', 'w', encoding='utf-8') as file:
file.writelines(sp)
Голосование за лучший ответ
Kil002 Гуру (2535) 3 месяца назад
А про отступы наверное забыли?

 import os  

path = r"C:/Users/Administrator/Downloads/cookies2" # путь до папки
word = '_|WARNING:'
sp = []

for filename in os.listdir(path):
if filename.endswith(".txt"):
filepath = os.path.join(path, filename)

with open(filepath, 'r', encoding='utf-8') as file:
data = file.readlines()

for line in data:
if word in line:
sp.append(line[line.index(word)::])

print('Готово')
print(f'Скопировано {len(sp)} строк')

with open('result.txt', 'w', encoding='utf-8') as file:
file.writelines(sp)
Сашок СашкинУченик (50) 3 месяца назад
Да, ты был прав была проблема в отступах, не поставил отступ после второго if Traceback (most recent call last):
File "C:\Users\Administrator\Downloads\find.py", line 11, in <module>
with open(filepath, 'r', encoding='utf-8') as file:
^^^^^^^^
NameError: name 'filepath' is not defined. Did you mean: 'filename'?
Сашок Сашкин Ученик (50) типо такую ошибку ща дает
В Б Знаток (355) 3 месяца назад
А, видимо он не находит .txt файл, поэтому действия после if не идут из этого следует, что file_path - неизвестная переменная:
 for filename in os.listdir(path):     
if filename.endswith(".txt"):
filepath = os.path.join(path, filename)
else:
return print('Ошибка: .txt файлы не найдены!')
Вот решение
Сашок СашкинУченик (50) 3 месяца назад
Тебе тоже спасибо за помощь но возниакет ошибка
return print("Ошибка: .txt файлы не найдены!")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SyntaxError: 'return' outside function
и в папке много файлов не только txt их наверное надо пропустить в скрипте?
В Б Знаток (355) Сашок Сашкин,
         for line in lines: 
            if word in line: 
                sp.append(line[line.index(word)::]) 
                break 
        with open('result.txt', 'w', encoding='utf-8') as file:  
            file.writelines(sp) 
        input(f'Готово\nСкопировано {len(sp)} строк.') 
    else: 
        return input('Ошибка') 
find_lines("C:\Users\Administrator\Downloads\cookies2") 
вторая часть, код я маленько улучшил
В БЗнаток (355) 3 месяца назад
 import os 

word = '_|WARNING:'
sp = []
def find_lines(main_path):
global sp
if os.path.exists(main_path):
for filename in os.listdir(main_path):
if filename.endswith(".txt"):
file_path = os.path.join(main_path, filename)
break
if not filename.endswith(".txt"):
file_path = None
if file_path == None:
return input('Ошибка: .txt файла не существует!')
with open(file_path, 'r') as file:
lines = file.readlines()
первая часть
В БЗнаток (355) 3 месяца назад
отступы подправь сам, а то я не могу
Похожие вопросы