Обработка имен файлов в Python - PullRequest
0 голосов
/ 23 мая 2019

Я написал функцию для удаления двойных пробелов из моих файлов необработанных данных:

def fixDat(file):
    '''
    Removes extra spaces in the data files. Replaces original file with new
    and renames original to "...._original.dat".
    '''
    import os

    import re
    with open(file+'.dat', 'r') as infile:
        with open(file+'_fixed.dat', 'w') as outfile:
            lines = infile.readlines()
            for line in lines:
                fixed = re.sub("\s\s+" , " ", line)
                outfile.write(fixed)

    os.rename(file+'.dat', file+'_original.dat')
    os.rename(file+'_fixed.dat', file+'.dat')

У меня есть 19 файлов в папке, которые мне нужно обработать с помощью этой функции, но я не уверен, как анализировать имена файлов и передавать их в функцию. Что-то вроде

for filename in folder:
    fixDat(filename)

но как мне кодировать filename и folder в Python?

1 Ответ

1 голос
/ 23 мая 2019

Если я правильно понимаю, вы спрашиваете о функциональности os модуля .walk() . Где пример будет выглядеть так:

import os
for root, dirs, files in os.walk(".", topdown=False): # "." uses current folder
    # change it to a pathway if you want to process files not where your script is located
    for name in files:
        print(os.path.join(root, name))

С выходными именами файлов, которые можно подавать в вашу функцию fixDat(), например:

./tmp/test.py
./amrood.tar.gz
./httpd.conf
./www.tar.gz
./mysql.tar.gz
./test.py

Обратите внимание, что это все строки, поэтому вы можете изменить скрипт на:

import os
for root, dirs, files in os.walk(".", topdown=False):
    for name in files:
        if name.endswith('.dat'): # or some other extension
            print(os.path.join(root, name))
            fixDat(os.path.join(root, name))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...