Python: 重命名文件 returns 错误的名称
Python: renaming files returns the wrong name
假设我有一个包含 1000 个 csv 文件的文件夹,这些文件的名称是 event_1.csv
、event_2.csv
、...、event_1000.csv
.
我实际上有 25 个这样的文件夹,我想重命名这些文件,第一个文件夹的前 4 个字符是 0001
,第二个文件夹是 0002
,所有一直到 0025
。最后 4 个字符代表事件,例如第一个事件是 0001
,第二个事件是 0002
,一直到 1000
.
因此第一个文件夹中的第一个文件以这种方式更改:event_1.csv = 00010001.csv
。
无论如何我的代码是错误的,因为第一个文件夹中的前 100 个文件被命名为 00020000.csv
到 00020099.csv
,因为 0002
应该只在第二个文件夹中使用。然后,从第 101 个文件到最后一个,我得到正确的文件名:00010101.csv
到 00011000.csv
.
这是我的代码:有什么问题吗?
import os, sys
import glob
import csv
directory=r'C:\Users\MyName\Desktop\Tests'
subdir=[x[0] for x in os.walk(directory)]
subdir.pop(0)
N=['0001','0002','0003','0004','0005','0006','0007','0008','0009','0010','0011','0012','0013','0014','0015','0016','0017','0018','0019','0020','0021','0022','0023','0024','0025']
for i in subdir:
for n in N:
temp_dir=r''+i
os.chdir(temp_dir)
A=str(n)
for file in glob.glob("*.csv"):
if len(file)==11:
event='000'+str(file[6])
newname=A+event
os.rename(file, newname + '.csv')
if len(file)==12:
event='00'+str(file[6:8])
newname=A+event
os.rename(file, newname + '.csv')
if len(file)==13:
event='0'+str(file[6:9])
newname=A+event
os.rename(file, newname + '.csv')
if len(file)==14:
event=file[6:10]
newname=A+event
os.rename(file, newname + '.csv')
如果您确定文件的所有名称,则可以大大简化您的代码(如 M.T 所说)。尝试类似的东西:
for n,i in enumerate(subdir):
os.chdir(r''+i) # Or whatever your folders are named
for m,file in enumerate(glob.glob("*.csv")):
newname = "{0:04d}{1:04d}.csv".format(n+1,m+1)
os.rename(file, newname)
编辑:枚举更好。
假设我有一个包含 1000 个 csv 文件的文件夹,这些文件的名称是 event_1.csv
、event_2.csv
、...、event_1000.csv
.
我实际上有 25 个这样的文件夹,我想重命名这些文件,第一个文件夹的前 4 个字符是 0001
,第二个文件夹是 0002
,所有一直到 0025
。最后 4 个字符代表事件,例如第一个事件是 0001
,第二个事件是 0002
,一直到 1000
.
因此第一个文件夹中的第一个文件以这种方式更改:event_1.csv = 00010001.csv
。
无论如何我的代码是错误的,因为第一个文件夹中的前 100 个文件被命名为 00020000.csv
到 00020099.csv
,因为 0002
应该只在第二个文件夹中使用。然后,从第 101 个文件到最后一个,我得到正确的文件名:00010101.csv
到 00011000.csv
.
这是我的代码:有什么问题吗?
import os, sys
import glob
import csv
directory=r'C:\Users\MyName\Desktop\Tests'
subdir=[x[0] for x in os.walk(directory)]
subdir.pop(0)
N=['0001','0002','0003','0004','0005','0006','0007','0008','0009','0010','0011','0012','0013','0014','0015','0016','0017','0018','0019','0020','0021','0022','0023','0024','0025']
for i in subdir:
for n in N:
temp_dir=r''+i
os.chdir(temp_dir)
A=str(n)
for file in glob.glob("*.csv"):
if len(file)==11:
event='000'+str(file[6])
newname=A+event
os.rename(file, newname + '.csv')
if len(file)==12:
event='00'+str(file[6:8])
newname=A+event
os.rename(file, newname + '.csv')
if len(file)==13:
event='0'+str(file[6:9])
newname=A+event
os.rename(file, newname + '.csv')
if len(file)==14:
event=file[6:10]
newname=A+event
os.rename(file, newname + '.csv')
如果您确定文件的所有名称,则可以大大简化您的代码(如 M.T 所说)。尝试类似的东西:
for n,i in enumerate(subdir):
os.chdir(r''+i) # Or whatever your folders are named
for m,file in enumerate(glob.glob("*.csv")):
newname = "{0:04d}{1:04d}.csv".format(n+1,m+1)
os.rename(file, newname)
编辑:枚举更好。