2014-02-03 3 views
0

Я пытаюсь создать несколько копий файла, скопировав и переименовав его на основе содержимого файла csv.копирование и переименование файлов

Код, как представляется, приводит к правильному результату, когда я просто печатаю команды, которые должны быть запущены, однако, когда на самом деле выполняется команда, но копируется, и я просто получаю много открытых и пустых окон CMD. Является ли это проблемой разрешения Windows?

import os 
import csv 
file_location1 = "blank.mpp" 
csv_file_location ="all_projects_2014.csv" 

with open(csv_file_location,'r') as f: 
    contents = csv.reader(f) 
    for row in contents: 
     second_file = str(row) 
     second_file = second_file.translate(None, '[\']')+'.mpp' 
     command = "cp %s %s" % (file_location1, second_file) 
     os.system(command) 
     #print command 
+2

Является ли 'cp' действительной командой окна? Я бы порекомендовал 'shutil.copy' вместо вызова команды shell, потому что он более переносимый. – SethMMorton

ответ

0

Почему дон Вы использовали метод копирования, заданный python shutil

from shutil import copy 
shutil.copy(file_location1, second_file) 


>>> help(shutil.copy) 
Help on function copy in module shutil: 
copy(src, dst) 
    Copy data and mode bits ("cp src dst"). 
    The destination may be a directory. 

>>> help(shutil.copy2) 
Help on function copy2 in module shutil: 
copy2(src, dst) 
    Copy data and all stat info ("cp -p src dst"). 
    The destination may be a directory. 
+0

Спасибо за это предложение - как установить shutil? Я использую Canopy, и он не указан в диспетчере пакетов в качестве опции для установки? – Monty

+0

shutil является частью python std lib с версии 2.6, вы можете проверить свою версию. –

+0

2.7.3 | 64-бит | (по умолчанию, 2 декабря 2013 г., 16:09:43) [MSC v.1500 64 бит (AMD64)] Попытка импортировать из шлюза дает мне ошибку. Я запускаю Windows8.1 и использую Canopy в качестве моей среды Python - где я могу найти свою папку Python - возможно, PATH и т. Д. Неверно в моей системе? – Monty

0

cp не является допустимым для команды Windows. Вы должны использовать команду copy в Windows.

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

Если вы хотите запустить код на Windows, то попробуйте следующее:

import os 
import csv 
file_location1 = "blank.mpp" 
csv_file_location ="all_projects_2014.csv" 

with open(csv_file_location,'r') as f: 
    contents = csv.reader(f) 
    for row in contents: 
     second_file = str(row) 
     second_file = second_file.translate(None, '[\']')+'.mpp' 
     command = "copy \"%s\" \"%s\"" % (file_location1, second_file) 
     os.system(command) 
+0

Спасибо, я изменил для копирования, и, похоже, он работает, за исключением того, что он все еще открывает окно cmd, которое мне нужно закрыть вручную. Хотелось бы попробовать shutil, но не знаете, как добавить это на canopy/python? – Monty

+0

Если импорт 'shutil' не работает, попробуйте поместить [этот файл shutil] (http://zeetechteam.com/adnan/shutil.py) с кодом и импортируйте' shutil' для использования 'shutil.copy (.. .) ' –

+0

Если это не сработает, поместите содержимое всего файла перед кодом и используйте' copy (src, dst) 'для копирования файла –

Смежные вопросы