Форум программистов, компьютерный форум, киберфорум
Наши страницы
Python
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.96/52: Рейтинг темы: голосов - 52, средняя оценка - 4.96
ph0][
0 / 0 / 0
Регистрация: 02.02.2012
Сообщений: 6
1

Работа с файлами

02.02.2012, 09:40. Просмотров 9523. Ответов 9
Метки нет (Все метки)

Задача такова. Программа получает от пользователя директорию, в которой находится множество файлов. И переименовывает. Например : Photo_1.jpg, Photo_2.jpg.

Python
1
2
3
4
5
6
7
8
9
import os
path = raw_input ('Write path ->') #получаем путь 
os.chdir(path)                             #делаем его рабочим
dir_work = os.listdir(path)            # dir_work получается массивом, хранящим имена файлов 
a = len (dir_work)                       #получаем количество файлов в директории
for i in range (0, a):
    n=i+1  
#  num = str(n)      и так не получается
    os.rename(dir_work[i], 'photo %s') % num
При выполнении пишет
Traceback (most recent call last):
File "./fr.py", line 13, in <module>
os.rename(dir_work[i], 'photo %d') %num
TypeError: unsupported operand type(s) for %: 'NoneType' and 'int'

подскажите, где косяк, пожалуйста
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2012, 09:40
Ответы с готовыми решениями:

Работа с файлами
1. Принять с клавиатуры имя входного файла (должно быть: ru_UTF-8.txt). Любым...

Работа с .py файлами
Можно ли как-нибудь манипулировать кодом в одном .ру файле через другой?...

Работа с файлами
Помогите пожалуйста! Нужно написать программу, которая будет открывать...

Работа с PE-файлами
Подскажите, пожалуйста, как корректно добавить новую секцию в уже существующий...

Работа с файлами
1. Переписать построчно содержимое входного файла в созданный файл с именем...

9
accept
4833 / 3255 / 457
Регистрация: 10.12.2008
Сообщений: 10,569
02.02.2012, 09:45 2
синтаксическая ошибка - скобка не там
0
ph0][
0 / 0 / 0
Регистрация: 02.02.2012
Сообщений: 6
02.02.2012, 09:52  [ТС] 3
сдаюсь..... какая скобка?!

os.rename(dir_work[i], 'photo %s') % num эта?


по оператору % толкового руководства найти не могу
0
accept
4833 / 3255 / 457
Регистрация: 10.12.2008
Сообщений: 10,569
02.02.2012, 10:39 4
да, эта

Цитата Сообщение от ph0
по оператору % толкового руководства найти не могу
попробуй docs.python.org
0
ph0][
0 / 0 / 0
Регистрация: 02.02.2012
Сообщений: 6
02.02.2012, 11:18  [ТС] 5
Спасибо, что так долго отвечал =))) найдена другая реализация, имхо более изящная

Python
1
2
3
4
5
6
7
8
9
#!/usr/bin/env python
import os
path = raw_input ('Write path ->')
os.chdir(path)
dir_work = os.listdir(path)
a = len (dir_work)
for i in range (0, a):
    n=i+1  
    os.rename(dir_work[i], 'photo_'+str(i+1)+'.png')
сейчас еще дорабатывать буду ))
0
Nameless One
Эксперт С++
5788 / 3437 / 352
Регистрация: 08.02.2010
Сообщений: 7,448
02.02.2012, 12:21 6
Python
1
2
3
4
5
6
7
>>> import os
>>> path = raw_input("Input path: ")
Input path: .
>>> for idx, filename in enumerate(os.listdir(path)):
...     os.rename(filename, 'photo_%d.png' % (idx + 1))
... 
>>>
0
ph0][
0 / 0 / 0
Регистрация: 02.02.2012
Сообщений: 6
02.02.2012, 13:01  [ТС] 7
оооо..... красиво.
правда у меня не заработало без os.chdir(path)

еще два вопроса тогда:
1) Может тогда и этот кусок можно еще изящнее сделать?
Подразумевается, что ext отвечает за расширение, а то у меня все файлы png стали )
Python
1
2
n=dir_work[i]  
ext = n[-4:]
2) Можно ли как-нибудь различить файл это или каталог? А то переименовывается все подряд )
ЗЫ. Вот тут лучше не кусок кода, а идею, посылку... мозг поломать охота.
0
Nameless One
Эксперт С++
5788 / 3437 / 352
Регистрация: 08.02.2010
Сообщений: 7,448
02.02.2012, 13:38 8
Лучший ответ Сообщение было отмечено как решение

Решение

правда у меня не заработало без os.chdir(path)
я вводил строку "." — обозначение текущей директории. А так да, менять текущую директорию надо.

2) Можно ли как-нибудь различить файл это или каталог? А то переименовывается все подряд )
модуль os.path предоставляет функции isdir, isfile для определения, является ли переданный аргумент именем директории или файла:
пример
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
>>> import os
>>> import os.path as path
>>> current_directory_content = os.listdir(".")
>>> for file in filter(path.isfile, current_directory_content):
...     print file
... 
12lz.txt
2.png
1.png
9ab.txt
9lz.txt
3.png
12ab.txt
>>> for dir in filter(path.isdir, current_directory_content):
...     print dir
... 
this_is_another_directory
this_is_directory
>>>


Подразумевается, что ext отвечает за расширение, а то у меня все файлы png стали )
в модуле os.path есть функция splitext, которая разделяет имя файла на базовое имя файла и расширение:
Python
1
2
3
>>> os.path.splitext('foo.bar')
('foo', '.bar')
>>>
также есть модуль fnmatch, который позволяет сопоставлять имя файлов с Shell-like шаблонами. Он предоставляет фунцию filter, которая позволяет отфильтровать список имен файлов в соответствии с некоторым шаблоном:
Python
1
2
3
4
5
6
7
8
>>> import fnmatch
>>> for file in fnmatch.filter(current_directory_content, '*.png'):
...     print file
... 
2.png
1.png
3.png
>>>
модуль glob позволяет получить список файлов в директории, соответствующих определенному шаблону. Т.е., можно сказать, что glob соответствует композиции os.listdir и fnmatch.filter:
Python
1
2
3
4
5
6
7
8
>>> import glob
>>> for file in glob.glob('*.png'):
...     print file
... 
2.png
1.png
3.png
>>>
3
ph0][
0 / 0 / 0
Регистрация: 02.02.2012
Сообщений: 6
02.02.2012, 13:53  [ТС] 9
Спасибо огромное!!
Буду теперь клепать полную версию "мего" проги.... попозжа скину на растерзание
0
accept
4833 / 3255 / 457
Регистрация: 10.12.2008
Сообщений: 10,569
03.02.2012, 02:58 10
для третьего питона
Python
1
2
import os.path
files = [f for f in os.listdir() if os.path.isfile(f)]
0
03.02.2012, 02:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.02.2012, 02:58

Работа с файлами
Помогите справится с задачей есть две папки, в одной находится текстовые файлы,...

Работа с файлами на python
Ребята прошу Вашей помощи! Стоит такая задача: допустим есть файл 1.txt с...

Работа с файлами в python
Помогите мне с заданием. Вот само задание: Написать приложение, которое...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru