Пробегать папки в python

У меня есть следующий код:

import os, glob
from obspy.core import read

for fname in glob.glob('BC.*'):
    arch=fname.split('.')
    print "<==== ", fname
    #  Quita la extension (.msd), si existe
    if(len(arch) > 7):
       del arch[-1]
    newName = '.'.join(arch)
    st = read(fname)
    segmentos = len(st)
    # cuenta el numero de segmentos del archivo para hacer el cambio en cada uno de ellos
    for i in range(0, segmentos):
        st[i].stats.network=arch[0]
        st[i].stats.station=arch[1]
        st[i].stats.location=arch[2]
        st[i].stats.channel=arch[3]
    print "====> ", newName , " Ok"
    st.write(newName, format="MSEED")
    print " --- ", fname, " [x]" 
    os.remove(fname)

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

Как он мог бы делать ему для того, чтобы он сделал поездку всех папок, не этого должен будучи быть помещая внутри нее?

У меня есть папки так:

C:\Datos\TEST1\DatosTest1
        \TEST2\DatosTest2
        \TEST3\DatosTest3
4
задан 05.12.2018, 18:12
2 ответа

Я написал этот код, чтобы заносить в список все файлы в папке и Ваших подпапках:

import os
import sys
from os import listdir
from os.path import isfile, isdir, join

def listdir_recurd(files_list, root, folder, checked_folders):

    if (folder != root):
        checked_folders.append(folder)

    for f in listdir(folder):
        d = join(folder, f)       

        if isdir(d) and d not in checked_folders:
            listdir_recurd(files_list, root, d, checked_folders)
        else:
            if isfile(d):  # si no hago esto, inserta en la lista el nombre de las carpetas ignoradas
                files_list.append(join(folder, f))

    return files_list

Функция используется так:

filez = listdir_recurd([], 'D:\test0', 'D:\test0', []) # esto lista todos los archivos
filez = listdir_recurd([], 'D:\test', 'D:\test', ['D:\\test\\t1', 'D:\\test\\t2']) # esto omite las carpetas 'D:\\test\\t1' y 'D:\\test\\t2'
filez = listdir_recurd([], 'D:\test', 'D:\test', ['D:\\test\\t1']) # esto omite la carpeta 'D:\\test\\t1'

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

filez = listdir_recurd([], 'C:\Datos', 'C:\Datos', [])

Больше info, здесь: http://programacionamartillazos.blogspot.pe/2016/01/listar-los-archivo-en-una-carpeta-y-sus.html

3
ответ дан 03.12.2019, 23:04

Я знаю два способа пробегать каталоги, где она является каждой папкой, которая есть внутри.

Формирует 1

import os
rootDir = '.'
for dirName, subdirList, fileList in os.walk(rootDir):
    print('Directorio encontrado: %s' % dirName)
    for fname in fileList:
        print('\t%s' % fname)

Форму 2

import os

rootDir = '.'
for dirName, subdirList, fileList in os.walk(rootDir, topdown=False):
    print('Directorio encontrado: %s' % dirName)
    for fname in fileList:
        print('\t%s' % fname)

Оба пробегают каталоги и сдержанные подкаталоги. Можешь приспосабливать ты cГіdigo используя эти формы.

2
ответ дан 03.12.2019, 23:04
  • 1
    Эдуардо, я думаю, что ты должен показывать его, чем, если он пробует открывать файл используя только fname, бросать его, и # 225; ошибка, для того, чтобы оно функционировало хорошо, необходимо делать join с каталогом ra и # 237; z: os.path.join(dirName, fname) –  César 16.02.2016, 20:46
  • 2
    @C и # 233; sar я верю в то, что не entend и # 237; которое ты имеешь в виду, podr и # 237; схвати объясняться? –  Armando 16.02.2016, 22:00
  • 3
    @C и # 233; sar я не считаю установленными и #39; obspy.core и # 39; чтобы это тестировать. Ночью podr и # 237; чтобы делать доказательства. –  Eduardo Munizaga 16.02.2016, 23:16
  • 4
    В которое я refer и # 236; в es, что в c и # 243; я говорю, что оригинал @Armando делает один st = read(fname), проблема - что используя твой м и # 233; совсем производить и # 225; ошибка, если ты делаешь: st = read(fname), так как ты должен делать раньше join с маршрутом ra и # 237; z, а именно: st = read(os.path.join(dirName, fname)):-) –  César 17.02.2016, 01:25

Теги

Похожие вопросы