Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > Узнать сколько файлов в папке


Автор: V0lk0d@V 19.2.2007, 05:11
Помогите решить проблему. Толи из за того что ночь на дворе но не могу придумать что делать. Допустим есть папка и мне надо узнать сколько в этой папке файлов. Толи это делать с помощью Regular Expression на подобие 
Код
os.system("dir/a > number.txt")
 а потом уже в этом файле фразу искать где говориться сколько файлов. Толи есть более легкая команда скорее даже системная виндов.

Автор: pythonwin 19.2.2007, 06:05
Код

import os
for k in os.listdir('.'):
    if os.path.isfile('./'+k): print k+' is file'


ОС:
debian и winxp

Автор: V0lk0d@V 19.2.2007, 14:54
Спасибо как раз то что надо smile
А если надо исползовать каждый из этих файлов. К примеру 
Код
g++ каждый файл
 то как это лучше сделать?  Мне кажется так не правильно:
Код

import os
for k in os.listdir('.'):
    if os.path.isfile('./'+k) : os.system("g++ " + k)

Автор: pythonwin 19.2.2007, 15:10
Цитата(V0lk0d@V @  19.2.2007,  17:54 Найти цитируемый пост)
 то как это лучше сделать?  Мне кажется так не правильно:

напиши, пожалуйста, постановку задачи, а то не понятно что ты хочешь сделать smile

Автор: V0lk0d@V 19.2.2007, 15:24
Есть папка с CPP файлами и надо все их скомпилировать. Вот я и хочу каждый файл взять и скомпилировать с помощю 
Код

g++ Название файла

Спасибо что помогаешь а то Python пока для меня ново

Автор: V0lk0d@V 20.2.2007, 01:21
Код

import os
name = ""
  for k in os.listdir('.'):
    if os.path.isfile('./' +k):
       name = name + "a"
       os.system('g++ ' + k + ' -o ' + name)

Вот примерно то что я хочу. Все хорошо вот только скомпилированные программы сохраняются в файлах "а", "аа", "ааа" и т.п. Тоесть теоритически меня это устраивает. Вот хорошо было бы взять название файла(тоесть к) и убрать из него последние 3 буквы

Автор: Artemios 20.2.2007, 02:46
Можно бы наверно и так:
Код

import os
name = ""
  for k in os.listdir('.'):
    if os.path.isfile('./' +k) and k.split('.')[-1]=='cpp':
       name = k.split('.')[-2]
       os.system('g++ ' + k + ' -o ' + name)

только все одно это из пушки (Питона) по воробьям, в данной задаче проще shell-скрипт:
Код

for k in ./*.cpp
do
g++ $k -o `expr $k : '\(.*\)[.].*'`
done


Автор: cherep 20.2.2007, 02:53
М.б. как-то так?

Код

import os

PATH = '.'
OUT = 'out'

for file in os.listdir(PATH):
  fullPath = PATH + '/' + file
  if os.path.isfile(fullPath):
    if file[-4:] == '.cpp':
      outName = file[:-4] + '.out'
      os.system('g++ ' + fullPath + ' -o ' + OUT + '/' + outName)


PS. Эх, опередили, а shell-скрипты таки и правда лучше в подобных задачах

Автор: pythonwin 20.2.2007, 12:00
немного изменил:
Код

import os
PATH = os.curdir
OUT = 'out'
for file in os.listdir(PATH):
    fullPath = os.path.abspath('%s/%s'%(PATH,file)
    if os.path.isfile(fullPath):
        if file[-4:] == '.cpp':
            outName = file[:-4] + '.'+OUT
            os.system('g++ %s -o %s/%s'%(fullPath, OUT, outName))

а это из ФП
Код

[os.system('g++ %s -o %s/%s.%s'%(os.path.curdir+'/'+file, 'out', file[:-4],'out')) for file in os.listdir(os.path.curdir) if os.path.isfile(os.path.curdir+'/'+file) and file[-4:] == '.cpp']

Автор: Artemios 20.2.2007, 14:53
Если необходимо именно из Питона, и по спп файлам пройтись, можно еще glob воспользоваться:
Код

import os, glob
for file in glob.glob('./*.cpp'):
    # условимся, что вложенных папок с '.cpp' в конце имени нет, иначе isfile таки нужен будет
    os.system('g++ '+file+' -o '+file[:-4])


Автор: V0lk0d@V 20.2.2007, 23:50
Всем спасибо smile очень помогли

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)