2012-07-20 5 views
2

python 2.7.2에서 Linux의 파일 복사본을 만들어야합니다.cp 명령을 실행하여 파일의 복사본을 만들거나 Python에서 파일 이름을 변경하십시오.

이를 새 = "namePart1"사전 + [키] + "namePart2"

os.system을 ("CP cfn5e10_1.lp이를 새")

단,이를 새가 올바른 문자열로 대체 될 수 없다.

포럼에 게시 된 게시물은 도움이되지 않습니다.

정말 도움이됩니다.

+1

os.system을 그렇게 부르시겠습니까? 왜냐하면 원래 파일을 "newfile"이라는 파일에 복사하기 때문입니다 (변수 newfile에있는 것이 아닌). – BorrajaX

+2

파일을 복사하거나 이름을 바꾸는 가장 좋은 방법이 파이썬에 무엇이 있는지 묻는 것이 훨씬 낫습니다. 파이썬에서'cp' 또는'mv'를 사용하는 법. –

답변

8

os.sytem 대신 파일을 복사하려면 을 사용하십시오. 새 프로세스를 만들 필요가 없으며 파일 이름에 비정상적인 문자가있는 파일 이름을 자동으로 처리합니다 (예 : os.sytem). 공백 - os.system은 명령을 셸로 전달하기 만하면 셸에서 공백이있는 파일 이름과 기타 가능한 문제가 발생할 수 있습니다. 예를 들어

: 이것은 당신의 변수 newfile를 대체하지 않습니다

newfile = "namePart1" + dictionary[key] + "namePart2" 
shutil.copyfile("cfn5e10_1.lp", newfile) 
+0

불행히도 모든 filestypes에서 작동하지 않습니다. 예를 들어, 형식화 된 xls는'copyfile'을 사용할 때 형식을 유지하지 않습니다. 그러나 OP를 위해, 그것은 직업을해야한다. – Kazanz

+0

@ 카잔 즈 : 음, 뭐라구? 서식있는 Excel 문서는 무엇과 관련이 있습니까? 더 자세하게 얘기해 주 시겠어요? 'shutil.copyfile'은 파일의 [대체 데이터 스트림] (https://en.wikipedia.org/wiki/NTFS#Alternate_data_streams_.28ADS.29)을 복사하지 않을 가능성이 높지만, 엑셀 파일에 의한 대체 데이터 스트림의 사용. –

+0

네, 맞습니다. 'shutil.copyfile'은 솔루션입니다. OP는 파일 메타 데이터를 복사하지 않을 것을주의해야합니다. [여기 경고 참조] (https://docs.python.org/3.6/library/shutil.html#module-shutil). "POSIX 플랫폼에서 이것은 파일 소유자와 그룹이 ACL뿐만 아니라 손실된다는 것을 의미합니다 Mac OS에서는 리소스 포크와 다른 메타 데이터가 사용되지 않습니다. 이는 리소스가 손실되고 파일 유형과 작성자 코드가 올바르지 않음을 의미합니다 Windows에서 파일 소유자, ACL 및 대체 데이터 스트림이 복사되지 않습니다 "- python docs – Kazanz

2

.

os.system("cp cfn5e10_1.lp newfile") 

당신은과 같이 문자열의 끝에 변수를 연결하는 필요

subprocess.call(["cp", "cfn5e10_1.lp", "newfile"]) 

: 파이썬에서 cp를 호출 할 경우

os.system("cp cfn5e10_1.lp " + newfile) 
+1

이것은 주어진 값으로 안전하지 않습니다 - 'newfile'이 공백을 포함하고 있으면 여러 단어로 문자열 분할되지 않도록하지 않습니다 예를 들면. –

1

subprocess 모듈을 사용 그러나 shutil 모듈의 함수를 사용하는 것이 좋습니다.

관련 문제