【问题标题】:Python: renaming files returns the wrong namePython:重命名文件返回错误的名称
【发布时间】:2016-12-02 11:08:28
【问题描述】:

假设我有一个包含 1000 个 csv 文件的文件夹,名称分别为 event_1.csvevent_2.csv、...、event_1000.csv

我实际上有 25 个这样的文件夹,我想重命名这些文件,使第一个文件夹的前 4 个字符是 0001,第二个是 0002,一直到 0025 .最后4个字符代表事件,第一个事件是0001,第二个是0002,一直到1000

所以第一个文件夹中的第一个文件以这种方式更改:event_1.csv = 00010001.csv

无论如何我的代码是错误的,因为第一个文件夹中的前 100 个文件被命名为 00020000.csv00020099.csv,因为 0002 应该只在第二个文件夹中使用。然后,从第 101 个文件到最后一个文件,我得到了正确的文件名:00010101.csv00011000.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')

【问题讨论】:

标签: python csv directory renaming


【解决方案1】:

如果您确定文件的所有名称,则可以大大简化您的代码(如 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)

编辑:枚举更好。

【讨论】:

  • subdir 是位于母文件夹中的所有 25 个文件夹的列表。
  • 这将忽略文件的当前名称,并以 glob.glob() 返回它们的任何顺序重命名。
  • 也许使用enumerate 代替计数器,代价是在format 中写入n+1?而且n++ 不是python 语法,而是n+=1
  • 你说得对,文件按词法顺序排列似乎很“自然”,但不确定……你有什么技巧可以解决这个问题吗?
  • @Daneel 可以解析文件名。 m=int(filename[6:-4])
猜你喜欢
  • 1970-01-01
  • 2015-12-11
  • 1970-01-01
  • 2021-03-31
  • 2015-11-28
  • 2020-09-23
  • 1970-01-01
  • 2015-04-17
  • 2020-06-29
相关资源
最近更新 更多