Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 24, 2013 14:27:06

Suliman
Зарегистрирован: 2013-06-18
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

Создать список файлов

Мне нужно создать список со списком файлов в каталоге без расширений. Код очень простой, однако не могу понять, почему он мне вместо списка файлов создает списки из отдельных букв.

	jpgpath = glob.glob("D:\\test1\\*.jpg")
	jpgfiles = []
	for jpgfile in jpgpath:
		jpgfiles += jpgfile[:-4]
	print (jpgfiles)

Вот что он мне выдает:
D:\Proj\Kolya_img\Gmail>999.py
['D', ':', '\\', 't', 'e', 's', 't', '1', '\\', '1', '7', '.', 'j', 'p', 'g', 'D
', ':', '\\', 't', 'e', 's', 't', '1', '\\', 'K', 'A', 'N', 'O', 'P', 'U', 'S',
'_', 'P', 'S', 'S', '_', '9', '1', '3', '_', '1', '_', '7', '.', 'j', 'p', 'g']

Офлайн

#2 Окт. 24, 2013 14:47:42

Suliman
Зарегистрирован: 2013-06-18
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

Создать список файлов

Сделал вот так:

	jpgpath = glob.glob("D:\\test1\\*.jpg")
	jpgfiles = []
	for jpgfile in jpgpath:
		print jpgfile[:4]
		jpgfiles.append(jpgfile[:3])
	print (jpgfiles)
Однако вместо расширения откусывается почти весь путь. Вместо
D:\test1\KANOPUS_PSS_913_1_7.jpg
получаю:
D:\t

Офлайн

#3 Окт. 24, 2013 14:56:25

smoke853
Зарегистрирован: 2012-10-02
Сообщения: 123
Репутация: +  15  -
Профиль   Отправить e-mail  

Создать список файлов

import glob
import os
jpgpath = glob.glob('M:/Users/smoke/Pictures/Wallpapers/*.jpg')
jpgfiles = [os.path.basename(i).split('.')[0] for i in jpgpath]
print(jpgfiles)

#Ответ:
['303180-1920x1403', '404568-2048x1360', '410376-1942x1080', '432416-1920x1275', '432420-1920x1403', '441396-4714x3628', '455642-1920x1080']

Отредактировано smoke853 (Окт. 24, 2013 14:57:18)

Офлайн

#4 Окт. 24, 2013 14:57:16

nokados
От: Ростов
Зарегистрирован: 2013-10-15
Сообщения: 52
Репутация: +  0  -
Профиль   Отправить e-mail  

Создать список файлов

jpgfile[:3]
откусываешь до 3 символа в конце
надо
 jpgfile[:-4]
получается



моя подпись

Отредактировано nokados (Окт. 24, 2013 14:57:36)

Офлайн

#5 Окт. 24, 2013 15:12:53

vrabey
От: Киев
Зарегистрирован: 2013-04-17
Сообщения: 209
Репутация: +  23  -
Профиль   Отправить e-mail  

Создать список файлов

smoke853
.split('.')
если в имени файла больше одной точки(может такое быть?), то
rsplit('.', 1)

Офлайн

#6 Окт. 24, 2013 15:19:53

smoke853
Зарегистрирован: 2012-10-02
Сообщения: 123
Репутация: +  15  -
Профиль   Отправить e-mail  

Создать список файлов

vrabey, согласен, такое может быть.

Офлайн

#7 Окт. 24, 2013 17:06:59

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Создать список файлов

Suliman
jpgfiles =
for jpgfile in jpgpath:
jpgfiles += jpgfile
Suliman
не могу понять, почему он мне вместо списка файлов создает списки из отдельных букв.


Ты объединяешь строку со списком, Python тебе помогает это сделать и преобразовывает строку в список

s = 'What the fuck are you doing?"
print(list(s))

['W', 'h', 'a', 't', ' ', 't', 'h', 'e', ' ', 'f', 'u', 'c',
 'e', ' ', 'y', 'o', 'u', ' ', 'd', 'o', 'i', 'n', 'g', '?']


Странно, я думал, что таких неявных преобразований, как в PHP в Python нет

>>> l = []
>>> l + '123'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "str") to list
>>> l += '123'
>>> l
['1', '2', '3']



Отредактировано Budulianin (Окт. 25, 2013 12:30:36)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version