Запуск скрипта Python для всех файлов в каталоге - PullRequest
4 голосов
/ 09 апреля 2010

У меня есть скрипт Python, который читает текстовый CSV-файл и создает файл списка воспроизведения. Однако я могу сделать только один раз, например:

python playlist.py foo.csv foolist.txt

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

До сих пор я смотрел на создание txt-файла со списком всех имен файла в каталоге, а затем просматривал каждую строку этого, однако я знаю, что должен быть более простой способ сделать это. *

Ответы [ 4 ]

8 голосов
/ 09 апреля 2010
for f in *.csv; do
  python playlist.py "$f" "${f%.csv}list.txt"
done

Это поможет? Это поместит foo.csv в foolist.txt и abc.csv в abclist.txt.

Или вы хотите, чтобы они все были в одном файле?

4 голосов
/ 09 апреля 2010

Просто используйте цикл for с глобусом звездочки, убедившись в том, что вы правильно указали в кавычках пробелы в именах файлов

for file in *.csv; do
   python playlist.py "$file" >> outputfile.txt;
done
3 голосов
/ 09 апреля 2010

Это один каталог или вложенный?

Ex.

topfile.csv
topdir
   --dir1
       --file1.csv
       --file2.txt
       --dir2
           --file3.csv
           --file4.csv

В случае вложенности вы можете использовать os.walk(topdir) для рекурсивного получения всех файлов и каталогов в каталоге.

Вы можете настроить свой скрипт на прием каталогов или файлов:

python playlist.py topfile.csv topdir

import sys
import os

def main():
    files_toprocess = set()
    paths = sys.argv[1:]
    for p in paths:
        if os.path.isfile(p) and p.endswith('.csv'):
            files_toprocess.add(p)
        elif os.path.isdir(p):
            for root, dirs, files in os.walk(p):
                files_toprocess.update([os.path.join(root, f) 
                                        for f in files if f.endswith('.csv')])
2 голосов
/ 09 апреля 2010

если у вас есть имя каталога, вы можете использовать os.listdir

os.listdir(dirname)

если вы хотите выбрать только определенный тип файла, например, только CSV-файл, который вы можете использовать glob модуль.

...