#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