Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 23, 2011 07:14:34

SumroK
От:
Зарегистрирован: 2010-04-20
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

os.remove() Не удаляет файлы

Traceback (most recent call last):
File “C:\files.py”, line 17, in <module>
list_files(0, ‘*.txt’, unicode('c:\dwn', ‘cp1251’))
File “C:\files.py”, line 15, in list_files
os.remove(path + “\\” + name)
WindowsError: : u'c:\\dwn\\\u041e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435.txt'
В общем такая ошибка появляется после запуска скрипта, хотя в директории лежит 2 txt файла 222.txt и 333.txt
Не могу понять откуда он берет c:\\dwn\\\u041e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435.txt
Вот код:

# -*- coding: cp1251 -*-
from os.path import join, getsize
import os
import fnmatch

def list_files(norm_size, file_ext, path):
num = 0
for root, dirs, files in os.walk(path):
for name in files:
SizeFile = getsize(join(root, name))
if SizeFile > norm_size:
if fnmatch.fnmatch(name, file_ext):
num = num + 1
print str(num) + " |" , name + " |", str(SizeFile) + " |", root + " deleted"
os.remove(path + "\\" + name)

list_files(0, '*.txt', unicode('c:\dwn', 'cp1251'))



Офлайн

#2 Сен. 23, 2011 07:32:57

SumroK
От:
Зарегистрирован: 2010-04-20
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

os.remove() Не удаляет файлы

Так-с косяк нашел в указании пути, забыл экранировать слэш, но теперь другая проблема, не удаляет файлы с русскими именами (Текстовый документ (1).txt) пробовал unicode(name, ‘cp1251’) не помогает

Traceback (most recent call last):
File “C:\files.py”, line 17, in <module>
list_files(0, ‘*.txt’, ‘c:\\test’)
File “C:\files.py”, line 15, in list_files
os.remove(path + “\\” + name)
WindowsError: : ‘c:\\test\\\xd2\xe5\xea\xf1\xf2\xee\xe2\xfb\xe9 \xe4\xee\xea\xf3\xec\xe5\xed\xf2 (2).txt’



Отредактировано (Сен. 23, 2011 07:36:58)

Офлайн

#3 Сен. 23, 2011 08:03:55

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

os.remove() Не удаляет файлы

А у меня нет проблем:

import os,glob
nm=u"ффф.ыва"
with open(nm,'wb') as f:
f.write("11111111111")
li=glob.glob(u"*.ыва")
os.remove(li[0])
логика такая - пользуйтесь где можете юникодом (если это конечно не 3.x)



Отредактировано (Сен. 23, 2011 08:08:22)

Офлайн

#4 Сен. 23, 2011 08:06:47

SumroK
От:
Зарегистрирован: 2010-04-20
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

os.remove() Не удаляет файлы

В контексте моего кода какие правки нужно сделать?



Офлайн

#5 Сен. 23, 2011 08:10:45

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

os.remove() Не удаляет файлы

map(os.remove,[i for i in glob.glob(os.path.join(path,"*.txt")) if Getsize(i)>l])
Если вы хотите все текстовые файлы удалить



Отредактировано (Сен. 23, 2011 08:14:16)

Офлайн

#6 Сен. 23, 2011 08:16:52

SumroK
От:
Зарегистрирован: 2010-04-20
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

os.remove() Не удаляет файлы

отдаю в glob.glob параметр file_ext, который передается в функцию, теперь нет никаких ошибок, но и файлы не удаляются, посмотрел про glob в мануале, вроде все как надо



Офлайн

#7 Сен. 23, 2011 08:17:02

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

os.remove() Не удаляет файлы

os.remove(path + "\\" + name)
Это не надо, директории должны быть без \\ в конце, а слепливание поручайте os.path.join. Если задаете разделитель явно, получите не переносимый между разными платформами код.



Отредактировано (Сен. 23, 2011 08:17:42)

Офлайн

#8 Сен. 23, 2011 08:19:20

SumroK
От:
Зарегистрирован: 2010-04-20
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

os.remove() Не удаляет файлы

упс не застал вашу правку :) спасибо!



Офлайн

#9 Сен. 23, 2011 08:19:32

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

os.remove() Не удаляет файлы

Посмотрите список который формируется, если не получится пишите часа черзез 2 мне на мыло или в личку - это процесс отладки и форму наверное не надо замусоривать.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version