2013-03-05 2 views
1

Мне нужно скопировать файл, указанный пользователем, и сделать его копию (указав ему имя, указанное пользователем). Это мой код:Как скопировать файл в Python?

import copy 

def main(): 

    userfile = raw_input('Please enter the name of the input file.') 
    userfile2 = raw_input('Please enter the name of the output file.') 

    infile = open(userfile,'r') 

    file_contents = infile.read() 

    infile.close() 

    print(file_contents) 


    userfile2 = copy.copy(file_contents) 

    outfile = open(userfile2,'w+') 

    file_contents2 = outfile.read() 

    print(file_contents2) 

main() 

Что-то странное происходит здесь, так как он не печатает содержимое второго файла, выходной_файл.

+11

использование 'shutil.copy' – mgilson

+0

Это выглядит как дубликат, проверить это: http://stackoverflow.com/questions/123198/how-do-i-copy-a- file-in-python –

+0

@MichaelW Спасибо! –

ответ

0

Python's shutil - гораздо более переносимый способ копирования файлов. Попробуйте пример ниже:

import os 
import sys 
import shutil 

source = raw_input("Enter source file path: ") 
dest = raw_input("Enter destination path: ") 

if not os.path.isfile(source): 
    print "Source file %s does not exist." % source 
    sys.exit(3) 

try: 
    shutil.copy(source, dest) 
except IOError, e: 
    print "Could not copy file %s to destination %s" % (source, dest) 
    print e 
    sys.exit(3) 
3

Если вы читаете outfile, то почему вы открываете его с помощью 'w+'? Это обрезает файл.

Использовать 'r' для чтения. См. link

+0

Когда я меняю его на «w», он все равно не работает. –

0

Почему вы не просто записываете содержимое входного файла в выходной файл?

userfile1 = raw_input('input file:') 
userfile2 = raw_input('output file:') 

infile = open(userfile1,'r') 
file_contents = infile.read()  
infile.close() 

outfile = open(userfile2,'w') 
outfile.write(file_contents) 
outfile.close() 

Какая копия состоит в том, что она мелко копирует объекты в python, не имеет ничего общего с копированием файлов.

Что эта линия на самом деле делает то, что это содержимое копии входного файла над именем выходного файла:

userfile2 = copy.copy(file_contents) 

Вы теряете свое имя выходного файла и никакой операции копирования не происходит.