Python Forum
Convert each element of a list to a string for processing - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: Convert each element of a list to a string for processing (/thread-33951.html)



Convert each element of a list to a string for processing - tester_V - Jun-13-2021

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.


RE: Convert each element of a list to a string for processing - perfringo - Jun-13-2021

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]  



RE: Convert each element of a list to a string for processing - tester_V - Jun-14-2021

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.


RE: Convert each element of a list to a string for processing - Pedroski55 - Jun-14-2021

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)



RE: Convert each element of a list to a string for processing - snippsat - Jun-15-2021

(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) 



RE: Convert each element of a list to a string for processing - Gribouillis - Jun-15-2021

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:
        ...



RE: Convert each element of a list to a string for processing - tester_V - Jun-16-2021

iglob
I did not know about it!
Thank you guys!