Python Forum

Full Version: Convert each element of a list to a string for processing
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Greetings!
I'm trying to remove a bunch of test files using 'glob'.
I thought I could do it like this:
prod_tod_to_Rem = glob.glob("C:/0001/**/*.txt", recursive=True)   
dev_tod_to_Rem =glob.glob("C:/04/**/*.txt",recursive=True)        
rm_lst = [prod_tod_to_Rem,dev_tod_to_Rem]

tor = [str(i) for i in rm_lst]
print(tor)
try:
    os.remove(tor)
    print (f" Removing TXT Flies --> {tor}")
except OSError as e:
    print("Error: CANNOT Remove TXT file -->>", e )
for some reason this part of the snippet not converting the list element to a string.
tor = [str(i) for i in rm_lst]
Thank you.
glob.glob returns list of strings, so converting to string once more is redundant.

In your code you converting list to string, not list elements. You need to unpack first if you want to convert items in list:

>>> spam = ['bacon', 'eggs']
>>> ham = [42, 2021]
>>> [str(i) for i in [spam, ham]]
["['bacon', 'eggs']", '[42, 2021]']
>>> [str(i) for i in [*spam, *ham]]
['bacon', 'eggs', '42', '2021']
However, in your case and if I understood your objective correctly, you should just unpack:

rm_lst = [*prod_tod_to_Rem, *dev_tod_to_Rem]  
I'm trying to remove/clean a bunch of directories using 'glob.glob'
I do not want to do 10 'try/except' for each directory.
I thought I can make a list of directories
prod_tod_to_Rem = glob.glob("C:/0001/**/*.txt", recursive=True)   
dev_tod_to_Rem =glob.glob("C:/04/**/*.txt",recursive=True)        
rm_lst = [prod_tod_to_Rem,dev_tod_to_Rem]
and will pass them to the try/except one by one.

I tried
rm_lst = [*prod_tod_to_Rem, *dev_tod_to_Rem]  
it does the same thing like the
rm_lst = [prod_tod_to_Rem,dev_tod_to_Rem]
 
tor = [str(i) for i in rm_lst]
print(tor)
I might be confused and do not understand your suggestion...
thank you.
If I wanted to remove all the .odt files in a directory and or subdirectories:

import glob, os

path = '/home/pedro/summer2021/**/'

all_files = glob.glob(path + '*.odt')

# careful with this, there is no going back
for a in all_files:
    os.remove(a)
(Jun-14-2021, 08:45 PM)tester_V Wrote: [ -> ]I thought I can make a list of directories
Yes you can here a example where make a list then iterate over with iglob
from glob import iglob
import os

folders = [r'G:\div_code\1', r'G:\div_code\2']
for folder in folders:
    for f_name in iglob(f"{folder}/**/*.txt", recursive=True):
        os.remove(f_name) 
You can also write a glob function that takes several patterns
from glob import iglob
from itertools import chain

def multiglob(ipattern, recursive=False):
    return chain.from_iterable(iglob(p, recursive=recursive) for p in ipattern)

for tor in multiglob(("C:/0001/**/*.txt", "C:/04/**/*.txt"), recursive=True):
    try:
        ...
iglob
I did not know about it!
Thank you guys!