【问题标题】:Rename file with parent string if filename is a substring of list of strings如果文件名是字符串列表的子字符串,则使用父字符串重命名文件
【发布时间】:2019-11-16 20:13:36
【问题描述】:

我在目录中有文件,文件名是字符串列表的子字符串。我需要用列表中的字符串重命名文件

filenames in "./temp" = aa.txt, bb.txt, cc.txt    
list_of_names = ['aa12.txt', 'bb12.txt', 'cc12.txt']

我希望将文件重命名为 list_of_names 中的文件。尝试了下面的代码,但得到一个错误

for filename in os.listdir('./temp'):
for i, item in enumerate(list_of_names):
    if filename in item:
        os.rename(filename,list_of_names[I])

FileNotFoundError: [Errno 2] 没有这样的文件或目录:'aa.txt' -> 'aa12.txt'

【问题讨论】:

    标签: python string list file-io python-os


    【解决方案1】:

    试试:

    os.rename(‘./temp/‘ + filename, ‘./temp/‘+ list_of_names[i])
    

    另外,考虑使用 pathlib 进行文件系统操作。

    【讨论】:

      【解决方案2】:

      我认为这会更简单:

      os.chdir('./temp')
      for filename in os.listdir():
          for newname in list_of_names:
              if filename.split('.')[0] in newname.split('.')[0]:
                  os.rename(filename, newname)
      

      请注意,“aa12.txt”中的“aa.txt”将返回 False。

      【讨论】:

        【解决方案3】:
        import os;
        %loading names of files in A 
        A = os.listdir();
        %creating B for intermediate processing
        B = os.listdir();
        i = 0;
        for x in A:
            t = x.split(".")    %temp variable to store two outputs of split string
            B[i] = t[0]+'12.txt'    
            os.rename(A[i],B[i])
            i = i+1
        

        【讨论】:

        • 这个答案包含几行不是有效的python语法。行不以 ';' 结尾,并且 cmets 不以 '%' 开头。从逻辑上讲,不需要创建第二个列表“B”并通过调用 os.listdir() 来填充它……无论如何,您都替换了每个元素。
        • 这可能不是最有效的代码。但这绝对是一个有效的代码。我已经尝试运行它并得到了无错误的结果。
        猜你喜欢
        • 2011-12-27
        • 1970-01-01
        • 2013-12-18
        • 2015-04-04
        • 2018-07-12
        • 2017-10-11
        • 2016-11-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多