2017-01-17 3 views
0

Я получаю неправильный вывод, даже если файл существует. Ниже приведен код ...Получение неправильного вывода для программы для копирования содержимого одного файла в другой в python

from sys import argv 
from os.path import exists 
import sys 
import os 

script,fromf,tof=argv 
inf=open(fromf) 
if exists(str(inf))==True: 
    indata=inf.read() 
    outf=open(tof,'w') 
    if exists(str(outf))==True: 
     print("Error! Output file exists.") 
     sys.exit() 
    else: 
     outf.write(indata) 
     print("The task is accomplished.") 
else: 
    print("Error! Input file doesn't exists.") 

Я передаю аргументы, как показано ниже ....

python3 file.py aaa.txt bbb.txt 

файл aaa.txt существует ... но до сих пор она показывает «Error! Input файл не существует "

+1

Вы можете (и должны) открывать файлы с помощью контекстного менеджера 'с открытым (somefilename) как F:'. Google it :-) –

+0

Я не понимаю, почему вы выполняете эту проверку. Если нет файла 'aaa.txt', то' open' не будет работать с 'FileNotFoundError' –

ответ

2

os.path.exists ожидает путь (строка), а не объект file.

Вы должны использовать fromf в качестве аргумента:

if exists(fromf): # no need for " == True" 
    # ... 
1

Вы можете проверить наличие файла, снабжая путь в виде строки в os.path.exists. Однако то, что вы делаете, это предоставление дескриптора файла; поэтому os.path.exists возвращает False, хотя файл существует.

Я бы не стал даже проверять существование. Если файлы существуют, все будет хорошо, если нет, вы можете просто зафиксировать ошибку, используя try: except.

Кроме того, вы не закрываете файлы в своем коде, что может привести к проблемам. Лучше их открыть, используя синтаксис with open(filename) as filehandle, который гарантирует, что они будут закрыты в конце.

Полный пример кода может выглядеть следующим образом:

from sys import argv 
import sys 

script,fromf,tof=argv 
try: 
    with open(fromf) as inf: 
     indata=inf.read() 
     with open(tof,'w') as outf: 
      outf.write(indata) 
      print("The task is accomplished.") 
except: 
    print("Error!") 
    sys.exit() 
1

Вы уже open файл. Если файл не существует, вы получите исключение. Таким образом, ваш тест бесполезен (и неправильно, как объяснил Рейт).

Кроме «проверки, если файл существует перед перезаписью» функция не работает:

outf=open(tof,'w') 
if exists(str(outf))==True: 
    print("Error! Output file exists.") 
    sys.exit() 
else: 
    outf.write(indata) 
    print("The task is accomplished.") 

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

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

Исправлен код:

if exists(tof): 
    print("Error! Output file exists.") 
    sys.exit() 
outf=open(tof,'w') 
Смежные вопросы