2017-01-31 3 views
-1

У меня есть сценарий python, который мне нужно запустить из командной строки Windows. ЛинияPython имя файла, если оператор не работает

for filename in os.listdir(os.getcwd() + "\\sampdirectory1\\sampdirectory2"): 
    if filename.startswith("sample.csv"): 
    os.remove("sample.csv") 

продолжает давать мне ошибку

Система не может найти указанный файл «sample.csv»

Ну файл еще не существует, он создается в сценарий впервые редактируется скриптом каждый раз после этого. Я не понимаю, почему он пытается сделать os.remove по адресу sample.csv, когда , если заявление должно завершиться ошибкой, что означает, что удаление не должно быть достигнуто.

+0

Есть ли причина, по которой вы хотите использовать 'startswith' вместо проверки полного имени файла? Возможно ли, что есть файл с именем 'sample.csv ________', где' ____' может быть что угодно? – MooingRawr

+0

Нет, это невозможно. – rad10

+0

По той или иной причине у вас есть файл с именем 'r '. \ Sampdirectory1 \ sampdirectory2 \ sample.csv" + something' где 'something' может быть пустой строкой. Вы не можете удалить этот файл как "r". \ Sample.csv ", потому что это не тот же путь. – eryksun

ответ

-1

Есть 2 вещи, чтобы заметить здесь:

первый: папка/назначения различны. вы должны использовать os.remove (os.getcwd() + "\ sampdirectory1 \ sampdirectory2" + "sample.csv")

второй: более элегантное решение будет

try: 
    os.remove(os.getcwd() + "\\sampdirectory1\\sampdirectory2" + "sample.csv") 
except: 
    print ('no such file/directory') 
    pass 
0

Вы можете» т удалить его, удерживая на нем, потому что «в операционной системе Windows пытается удалить файл, который используется вызывает исключение поднять»

https://docs.python.org/2/library/os.html#os.remove 
+0

Я не уверен, что он существует, но должно ли это делать заявление if?Я не понимаю, почему оператор if передается, когда файл НЕ ВЫХОДИТ – rad10

+0

@mrcrag, нет необходимости проверять, существует ли файл, поскольку цикл находится над файлами каталога. – saloua

-1

Там может быть файл .\sampdirectory1\sampdirectory2\sample.csv, поэтому условие справедливо. Но вы пытаетесь удалить файл .\sample.csv (sample.csv в текущей директории), который не существует, и вы получаете ошибку.

Кроме того, может быть файл .\sampdirectory1\sampdirectory2\sample.csvSOMETHING, поэтому условие все еще действует, и вы получаете сообщение об ошибке.

-1

Вам нужно сделать os.remove(filename) вместо os.remove("sample.csv") Потому что на первый sample.csv не тот файл, который вы проверяете, если он существует, прежде чем снимать. И даже имя файла - sample.csv, вам нужно точно указать полный путь к файлу.

И поскольку вы повторяете перепечатку файлов каталога, вам не нужно проверять, существует ли файл.

Так что, если вы хотите удалить файлы, чьи имена начинаются с sample.csv, код должен быть, как показано ниже:

for filename in os.listdir(os.getcwd() + "\\sampdirectory1\\sampdirectory2"): 
    if filename.startswith("sample.csv"): 
     os.remove(filename) 

Но если вы хотите удалить только sample.csv, то вам не нужно никаких циклов. Просто сделайте

filename = os.path.join(os.getcwd(), "sampdirectory1\\sampdirectory2\\sample.csv") 
if os.path.exists(filename): 
    os.remove(filename) 
Смежные вопросы