【问题标题】:How can I search in a subdir for a specific file?如何在子目录中搜索特定文件?
【发布时间】:2020-08-02 18:17:13
【问题描述】:

假设 start.py 位于 C:\。

import os
path = "C:\\Users\\Downloads\\00005.tex"
file = open(path,"a+")
file. truncate(0)
file.write("""Hello
        """)
file.close()
os.startfile("C:\\Users\\Downloads\\00005.tex")

子目录中可能有一些文件。例如:00001.tex、00002.tex、00003.tex、00004.tex。 我想首先在子目录中搜索具有最高编号(00004.tex)的文件,并使用下一个编号(00005.tex)创建一个新文件,写“Hello”并将其保存在子目录00​​005.tex中。 零是必要的还是我也可以将它们命名为 1.tex、2.tex、3.tex......?

【问题讨论】:

  • 看看这是否回答了您的问题stackoverflow.com/questions/3207219/…。将文件名放入列表后,您可以找到列表的最大值,然后将其加一并创建新文件并存储它们。
  • 如果要按字典顺序对它们进行排序,则零是必需的,否则 11.tex 会在 2.tex 之前。这取决于您如何实施例程以找到最高数字

标签: python


【解决方案1】:

从文字上看,“2”大于“100”,但在数字上当然是相反的。将文件写成“00002.txt”和“00100.text”的原因是对于编号为99999的文件,词法排序与数字排序相同。如果你把它们写成“2.txt”和“100.txt”那么你需要在排序前将名称的非扩展部分更改为整数。

在您的情况下,由于您想要下一个最大的数字,因此您需要将文件名转换为整数,以便获得最大值并加 1。由于无论如何您都在转换为整数,因此您的程序并不关心是否您是否在前面加上零。

所以选择是基于外部原因。有什么理由使它可以进行文本排序吗?如果不是,那么选择纯粹是随机的,做任何你认为更好看的事情。

【讨论】:

    【解决方案2】:

    你可以使用 glob:

    import glob, os
    os.chdir(r"Path")
    
    files = glob.glob("*.tex")
    entries = sorted([int(entry.split(".", 1)[0]) for entry in files])
    next_entry = entries[-1]+1
    

    next_entry 可以用作新文件名。然后,您可以使用此名称创建一个新文件并将您的新内容写入该文件

    【讨论】:

    • 我更新了答案。还请考虑以下来自@tdelaney 的帖子
    猜你喜欢
    • 2015-02-07
    • 1970-01-01
    • 2020-10-22
    • 2016-08-12
    • 1970-01-01
    • 2022-01-20
    相关资源
    最近更新 更多