나는 코드의 논리를 이해하지 않습니다. 나는 인쇄 문 추가 :
folder = "C:/Documents and Settings/DuffA/Bureaublad/shortcuts projects/klic01/11G008689_1"
import glob, os
for filename in glob.glob(os.path.join(folder, "*+*")):
print "I rename '+' to '_' in\n"+filename
os.rename(filename, filename.replace('+','_'))
print '\n\n---- Now, there after, are the filenames in \n '+folder
for root, dirs, filenames in os.walk(folder): # returms root, dirs, and files
for filename in filenames:
print '\nfilename==',filename
filename_split = os.path.splitext(filename) # filename and extension name (extension in [1])
filename_zero = filename_split[0]
extension = str.upper(filename_split[1])
print 'filename_zero==',filename_zero
print 'os.path.join(filename_zero, "*.*")==',os.path.join(filename_zero, "*.*")
print 'glob.glob(os.path.join(filename_zero, "*.*"))==',glob.glob(os.path.join(filename_zero, "*.*"))
for filename_zero in glob.glob(os.path.join(filename_zero, "*.*")):
print ' filename_zero in glob.glob(os.path.join(filename_zero, "*.*")) ==',filename_zero
os.rename(filename_zero, filename_zero.replace('.','_'))
그리고 여기에 결과
I rename '+' to '_' in
C:/Documents and Settings/DuffA/Bureaublad/shortcuts projects/klic01/11G008689_1\+po.rt.hos.txt
I rename '+' to '_' in
C:/Documents and Settings/DuffA/Bureaublad/shortcuts projects/klic01/11G008689_1\ar.am+is.doc
I rename '+' to '_' in
C:/Documents and Settings/DuffA/Bureaublad/shortcuts projects/klic01/11G008689_1\ath+os.html
I rename '+' to '_' in
C:/Documents and Settings/DuffA/Bureaublad/shortcuts projects/klic01/11G008689_1\d'a.rtagn+an
I rename '+' to '_' in
C:/Documents and Settings/DuffA/Bureaublad/shortcuts projects/klic01/11G008689_1\dum+as.doc
I rename '+' to '_' in
C:/Documents and Settings/DuffA/Bureaublad/shortcuts projects/klic01/11G008689_1\ki.kiouili.do+c
---- Now, there after, are the filenames in
C:/Documents and Settings/DuffA/Bureaublad/shortcuts projects/klic01/11G008689_1
filename== ar.am_is.doc
filename_zero== ar.am_is
os.path.join(filename_zero, "*.*")== ar.am_is\*.*
glob.glob(os.path.join(filename_zero, "*.*"))== []
filename== arctic.txt
filename_zero== arctic
os.path.join(filename_zero, "*.*")== arctic\*.*
glob.glob(os.path.join(filename_zero, "*.*"))== []
filename== ath_os.html
filename_zero== ath_os
os.path.join(filename_zero, "*.*")== ath_os\*.*
glob.glob(os.path.join(filename_zero, "*.*"))== []
filename== atla.ntic.html
filename_zero== atla.ntic
os.path.join(filename_zero, "*.*")== atla.ntic\*.*
glob.glob(os.path.join(filename_zero, "*.*"))== []
filename== d'a.rtagn_an
filename_zero== d'a
os.path.join(filename_zero, "*.*")== d'a\*.*
glob.glob(os.path.join(filename_zero, "*.*"))== []
filename== dum_as.doc
filename_zero== dum_as
os.path.join(filename_zero, "*.*")== dum_as\*.*
glob.glob(os.path.join(filename_zero, "*.*"))== []
filename== ki.kiouili.do_c
filename_zero== ki.kiouili
os.path.join(filename_zero, "*.*")== ki.kiouili\*.*
glob.glob(os.path.join(filename_zero, "*.*"))== []
filename== _po.rt.hos.txt
filename_zero== _po.rt.hos
os.path.join(filename_zero, "*.*")== _po.rt.hos\*.*
glob.glob(os.path.join(filename_zero, "*.*"))== []
glob.glob (os.path.join (filename_zero ". "))는 항상 존재를 [] os.path.join (파일 이름 _zero, ".")은 파일 이름이 아니며 경로가 아니므로 os.rename (filename_zero, filename_zero.replace ('.', '_' ')) 아무것도하지 마십시오. 그런데
, 난 당신이 IMO
for filename in os.listdir(folder):
if os.path.isfile(filename):
이상으로
for root, dirs, filenames in os.walk(folder):
for filename in filenames:
를 교체하는 것이 좋습니다 (이하 한 들여 쓰기가)
for filename in (f in os.listdir(folder) if os.path.isfile(f)):
나는 생각 네가 한 길은 난관이다. 만약 내가 올바르게 이해한다면, 당신이하고 싶은 것은 실제로 확장자 앞에 점과 '+'를 대치하는 것입니다. 즉, 확장자와 확장자 사이에 분리 점을 대체하지 않고 파일 이름, 확장자의 '+'는 사용할 수 없습니다. 어쨌든, 확장 기능이 포인트와 '+'를 가지고 있다는 것은 의미가 없습니다.
그래서 glob를 사용해보십시오. 그러나 인격적 인 이유는 '.'의 특별한 경우 때문입니다. 확장을 구분 짓는, 글로브가 실제로 어떻게 그 목표를 위해 사용될 수 있는지 나는 모른다.
그래서 나는 다른 길로 가야한다고 생각합니다. 와일드 카드 패턴과 일치하는 모든 파일 이름을 verifiy로 검사하고 처리해야하는 올바른 파일 이름 만 반환하도록 glob을 만드는 대신 파일 이름 목록에서 반복하여 '+'와 '를 바꿔야합니다. ' 확장 전 부분에. 네, 여기에 점이없고 '+'가없는 파일 이름이있을 것입니다. 그리고 그것은 프로그램에 의해 헛된 일이 될 것입니다. 그러나 어쨌든, 동일한 작업이 덩어리로 장면 뒤에서 수행됩니다. 그래서 일에 반기를 들여 상상할 수있는 코드를 작성하는 것을 선호합니다.
다음 코드는 짧고 efficent 솔루션
folder = "C:/Documents and Settings/DuffA/Bureaublad/shortcuts projects/klic01/11G008689_1"
import os
separ = os.sep
for n in os.listdir(folder):
print n
if os.path.isfile(folder + separ + n):
filename_zero, extension = os.path.splitext(n)
os.rename(folder + separ + n , folder + separ + filename_zero.replace('.','_').replace('+','_') + extension)
print '\n--------------------------------\n'
for n in os.listdir(folder):
print n
아니라 결과
+po.rt.hos.txt
ar.am+is.doc
arctic.txt
ath+os.html
atla.ntic.html
d'a.rtagn+an
dum+as.doc
ki.kiouili.do+c
--------------------------------
arctic.txt
ar_am_is.doc
ath_os.html
atla_ntic.html
d'a.rtagn+an
dum_as.doc
ki_kiouili.do+c
_po_rt_hos.txt
놀라운! 그런 좋은 대답을 해주셔서 너무 감사합니다 !! 나는 아직도 도움이되고 믿을 수 없을만큼 영리한 사이트의 모든 사람들이 얼마나 능가 할 수 없는지 !! (나와 떨어져서 명백하게!!) 감사!! –