python os.rename(…)赢得';不行!
我正在编写一个Python函数,将文件列表的扩展名更改为另一个扩展名,如将txt转换为rar,这只是一个空闲的示例。但我有个错误。代码是:python os.rename(…)赢得';不行!,python,file-rename,Python,File Rename,我正在编写一个Python函数,将文件列表的扩展名更改为另一个扩展名,如将txt转换为rar,这只是一个空闲的示例。但我有个错误。代码是: import os def dTask(): #Get a file name list file_list = os.listdir('C:\Users\B\Desktop\sil\sil2') #Change the extensions for file_name in file_list: entry_
import os
def dTask():
#Get a file name list
file_list = os.listdir('C:\Users\B\Desktop\sil\sil2')
#Change the extensions
for file_name in file_list:
entry_pos = 0;
#Filter the file name first for '.'
for position in range(0, len(file_name)):
if file_name[position] == '.':
break
new_file_name = file_name[0:position]
#Filtering done !
#Using the name filtered, add extension to that name
new_file_name = new_file_name + '.rar'
#rename the entry in the file list, using new file name
print 'Expected change from: ', file_list[entry_pos]
print 'into File name: ', new_file_name
os.rename(file_list[entry_pos], new_file_name)
++entry_pos
Error:
>>> dTask()
Expected change from: New Text Document (2).txt
into File name: New Text Document (2).rar
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
dTask()
File "C:\Users\B\Desktop\dTask.py", line 19, in dTask
os.rename(file_list[entry_pos], new_file_name)
WindowsError: [Error 2] The system cannot find the file specified
导入操作系统
def dTask():
#获取文件名列表
file\u list=os.listdir('C:\Users\B\Desktop\sil\sil2')
#更改扩展名
对于文件列表中的文件名:
输入位置=0;
#首先筛选“.”的文件名
对于范围(0,len(文件名))中的位置:
如果文件名[位置]='.'
打破
新建文件名=文件名[0:位置]
#过滤完成!
#使用筛选的名称,将扩展名添加到该名称
新建文件名=新建文件名+'.rar'
#使用新文件名重命名文件列表中的条目
打印“预期更改自:”,文件列表[条目位置]
打印“到文件名:”,新文件名
重命名(文件列表[条目位置],新文件名)
++入口位置
错误:
>>>dTask()
预期更改来自:新文本文档(2).txt
文件名:新文本文档(2).rar
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
dTask()
文件“C:\Users\B\Desktop\dTask.py”,第19行,在dTask中
重命名(文件列表[条目位置],新文件名)
WindowsError:[错误2]系统找不到指定的文件
正如您在打印输出中看到的那样,我可以成功地在变量级别获得具有另一个扩展名的文件名,但实际上并非如此,因为我无法在操作系统级别结束此过程。错误来自os.rename(…)。你知道怎么解决这个问题吗 重命名必须使用完整路径
import os
def dTask():
#Get a file name list
dir = 'C:\Users\B\Desktop\sil\sil2'
file_list = os.listdir(dir)
#Change the extensions
for file_name in file_list:
entry_pos = 0;
#Filter the file name first for '.'
for position in range(0, len(file_name)):
if file_name[position] == '.':
break
new_file_name = file_name[0:position]
#Filtering done !
#Using the name filtered, add extension to that name
new_file_name = new_file_name + '.rar'
#rename the entry in the file list, using new file name
print 'Expected change from: ', file_list[entry_pos]
print 'into File name: ', new_file_name
os.rename( os.path.join(dir, file_list[entry_pos]), os.path.join(dir,new_file_name))
++entry_pos
您必须使用重命名的完整路径
import os
def dTask():
#Get a file name list
dir = 'C:\Users\B\Desktop\sil\sil2'
file_list = os.listdir(dir)
#Change the extensions
for file_name in file_list:
entry_pos = 0;
#Filter the file name first for '.'
for position in range(0, len(file_name)):
if file_name[position] == '.':
break
new_file_name = file_name[0:position]
#Filtering done !
#Using the name filtered, add extension to that name
new_file_name = new_file_name + '.rar'
#rename the entry in the file list, using new file name
print 'Expected change from: ', file_list[entry_pos]
print 'into File name: ', new_file_name
os.rename( os.path.join(dir, file_list[entry_pos]), os.path.join(dir,new_file_name))
++entry_pos
如果您不在目录
C:\Users\B\Desktop\sil\sil2
中,Python肯定无法找到这些文件。如果您不在目录C:\Users\B\Desktop\sil\sil2
中,Python肯定无法找到这些文件
++entry\u pos
没有任何作用。Python中没有增量运算符。前缀+
正好与前缀-
对称。用两个+
作为前缀只是两个no-ops。因此,实际上您并没有做任何事情(在您将其更改为entry\u pos+=1
之后,您仍然在每次迭代中将其重置为零文件列表
,并且无法将其与迭代变量文件名
保持同步,即使您可以使用该索引!来说明如何更好地执行此操作++entry\u pos
不起任何作用。Python中没有增量运算符。前缀++
与前缀-
是对称的。用两个+
作为前缀只是两个无操作。所以你实际上什么都没做(在将其更改为entry_pos+=1
之后,在每次迭代中仍将其重置为零文件列表
,并且无法将其与迭代变量文件名
保持同步,即使您可以使用该索引!来说明如何更好地执行此操作您还希望使用双反斜杠在Python字符串中转义它们,因此
file_list = os.listdir('C:\Users\B\Desktop\sil\sil2')
你想要
file_list = os.listdir('C:\\Users\\B\\Desktop\\sil\\sil2')
或者使用前斜杠-Python神奇地将它们视为Windows上的路径分隔符。您还希望使用双反斜杠在Python字符串中转义它们,因此
file_list = os.listdir('C:\Users\B\Desktop\sil\sil2')
import os
def extChange(path,newExt,oldExt=""):
if path.endswith != "\\" and path.endswith != "/":
myPath = path + "\\"
directory = os.listdir(myPath)
for i in directory:
x = myPath + i[:-4] + "." + newExt
y = myPath + i
if oldExt == "":
os.rename(y,x)
else:
if i[-4:] == "." + oldExt:
os.rename(y,x)
你想要
file_list = os.listdir('C:\\Users\\B\\Desktop\\sil\\sil2')
或者使用前斜杠——Python神奇地将它们视为Windows上的路径分隔符
import os
def extChange(path,newExt,oldExt=""):
if path.endswith != "\\" and path.endswith != "/":
myPath = path + "\\"
directory = os.listdir(myPath)
for i in directory:
x = myPath + i[:-4] + "." + newExt
y = myPath + i
if oldExt == "":
os.rename(y,x)
else:
if i[-4:] == "." + oldExt:
os.rename(y,x)
现在叫它:
extChange("C:/testfolder/","txt","lua") #this will change all .txt files in C:/testfolder to .lua files
extChange("C:/testfolder/","txt") #leaving the last parameter out will change all files in C:/testfolder to .txt
现在叫它:
extChange("C:/testfolder/","txt","lua") #this will change all .txt files in C:/testfolder to .lua files
extChange("C:/testfolder/","txt") #leaving the last parameter out will change all files in C:/testfolder to .txt
重命名确实不喜欢变量。请使用shutil。示例取自 就你而言:
import shutil
shutil.move(file_list[entry_pos], new_file_name)
重命名确实不喜欢变量。请使用shutil。示例取自 就你而言:
import shutil
shutil.move(file_list[entry_pos], new_file_name)
+ + CynyPyPOS不做你认为它做的事情。我认为你想做CexyYPoS+=1 + + CeNyjPOS,不要做你认为它做的事。我想你想做CexyYPOS +1。谢谢你的警告。我倾向于写C++,把IFS后面的括号放进“”。,和++,-,之类的东西,我会及时加以修改。非常新的python初学者,因此不称职。有两件事:在您的代码中,…+来自外部。我不明白。它有垃圾价值。它看起来悬而未决,此后从未使用过。2)在评论3中:您正在使用一个单独的索引来归档列表,但未能将其与迭代变量file name保持同步。为了拓宽我的视野,您能详细解释一下您的意思吗?谢谢。@Mr ME:(1)
from\u ext
是copypata留下的,谢谢您抓住了它。(2)我认为,C++的唯一目的是从“:”、“FielyList[CeNyjPoS] ] /Cube >中获得当前文件的名称:“代码>打印”预期更改,尽管您可以(也应该)简单地使用<代码>文件名> /COD>。谢谢警告。我倾向于写C++,在IFS后面加上括号,将字符串转换成“”。,和++,-,之类的东西,我会及时加以修改。非常新的python初学者,因此不称职。有两件事:在您的代码中,…+来自外部。我不明白。它有垃圾价值。它看起来悬而未决,此后从未使用过。2)在评论3中:您正在使用一个单独的索引来归档列表,但未能将其与迭代变量file name保持同步。为了拓宽我的视野,您能详细解释一下您的意思吗?谢谢。@ME先生:(1)from\u ext
是从