Другой способ выбора всех типов файлов в Python

#python #csv #visual-studio-code #executable #glob

#Python #csv #visual-studio-code #Исполняемый файл #Глобус

Вопрос:

Я создал скрипт, который отлично работает в Visual Studio code, но сейчас я пытаюсь автоматизировать этот скрипт, который оказывается немного сложным. Я превратил файл в исполняемый файл unix для автоматизации, но когда я нажимаю на свой скрипт, я продолжаю получать сообщение об ошибке. Существует часть скрипта, которая выбирает все типы файлов .csv и удаляет их следующим образом…

 filestodelete = glob.glob('*.csv')[0]
os.remove('/Users/emmanuel/Documents/Selenium/{}'.format(filestodelete))
 

Проблема в том, что когда терминал достигает этого сегмента кода, я получаю эту ошибку…

 Traceback (most recent call last):
  File "/Users/emmanuel/Documents/Selenium/OptionsBotCode.py", line 32, in <module>
    filestodelete = glob.glob('*.csv')[0]
IndexError: list index out of range 
 

Я почти думаю, что это потому, что, когда я запускаю код в VSC, код автоматически использует каталог папки, в которой находится код. Однако, когда я запускаю его через файл exec, он не знает, в каком каталоге искать элементы, которые ему нужно удалить, и он не может получить каталог, потому что он читает эту строку (без информации о каталоге)

 filestodelete = glob.glob('*.csv')[0]
 

прежде чем он прочитает это

 os.remove('/Users/emmanuel/Documents/Selenium/{}'.format(filestodelete))
 

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

 filestodelete = glob.glob('/Users/emmanuel/Documents/Selenium/*.csv')[0]
os.remove('/Users/emmanuel/Documents/Selenium/{}'.format(filestodelete))
 

но я продолжаю получать это сообщение об ошибке

 Traceback (most recent call last):
  File "/Users/emmanuel/Documents/Selenium/OptionsBotCode.py", line 33, in <module>
    os.remove('/Users/emmanuel/Documents/Selenium/{}'.format(oldfilename))
FileNotFoundError: [Errno 2] No such file or directory: '/Users/emmanuel/Documents/Selenium//Users/emmanuel/Documents/Selenium/CC.csv'
 

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

Кто-нибудь знает обходной путь? Может быть, способ, которым я могу выбирать и управлять всеми файлами .csv в каталоге, не используя glob.glob и не запутывая мой бедный компьютер?

Спасибо

Ответ №1:

print(glob.glob('*.csv')) покажет, что вы получаете ошибку индекса, когда возвращаемый список пуст. filestodelete = glob.glob('*.csv')[0] выбирает один файл из списка возвращенных файлов, но если файлов нет, то индекс 0 недействителен.

Вместо этого используйте следующее, которое будет выполняться для каждого файла в возвращаемом списке и которое не будет выполняться os.remove , если список пуст:

 for file in glob.glob('*.csv'):
    os.remove(file)
 

Без указанного выше пути будут искать только файлы CSV в текущем каталоге.
Вы также можете поместить каталог впереди:

 for file in glob.glob('/Users/emmanuel/Documents/Selenium/*.csv'):
    os.remove(file)
 

Комментарии:

1. Это почти идеально. Большое вам спасибо @MarkTolonen Единственная проблема, с которой я сейчас сталкиваюсь, заключается в том, что все последующие файлы .csv, которые импортируются в каталог после запуска нового кода, удаляются. Есть ли способ остановить процесс удаления после пары строк кода? Чтобы представить ситуацию в контексте, после удаления всех CSV-файлов в этом каталоге мне нужно импортировать новый csv-файл, который я могу редактировать и отправлять по электронной почте. Эти части кода уже написаны и работают в VSC. Они не могут работать с использованием EXEC-файла, так как удаляются до того, как с ними можно будет работать и отправлять их по электронной почте.

2. Я надеюсь, что это имеет смысл @Mark