【问题标题】:Processing each file in directory, output with different extension处理目录中的每个文件,输出不同的扩展名
【发布时间】:2020-04-11 05:40:58
【问题描述】:

我写了一个 Python 程序,它读取一个测试输入文件并输出一个输出文件

inputFile = open ('test.dat', 'r')
outputFile = open('test.log', 'w')
outputFile.write(inputFile.read())
inputFile.close()
outputFile.close()

我想读取文件夹中的所有 .dat 文件并输出相应的 .log 文件,同时保持文件名前缀相同。有人可以帮我吗?

我发现我可以使用以下代码列出所有 dat 文件。但不知道从那时起该怎么办。

import os
for file in os.listdir("."):
    if file.endswith(".htm"):
        print(os.path.join("xxx", file))

另外:有没有办法知道目录中 .dat 文件的数量?这样,在处理每个文件时,我可以显示进度状态,例如:“正在处理 999 个数据文件的文件 1”等。

非常感谢 乔安娜

【问题讨论】:

  • 在一个示例中,您将 .dat 文件复制到 .txt,但在另一个示例中,您似乎将 html 文件复制到子目录 xxx。是哪个?
  • @tdelaney 我认为.htm 是她将如何做到这一点的一个示例。 @JoannaTrussel 您是想将.dat 文件中的所有内容复制到.log 文件中,还是尝试运行.dat 文件并输出.log 文件?
  • @WanmiSiangshai - 评论背后的重点是发帖人应该告诉我们。我根据第一个示例写了一个答案,但在 OP 解决问题之前它并不是真正的答案。

标签: python


【解决方案1】:

您可以使用glob 仅列出您想要的文件,并使用shutil.copyfile 将它们复制到新文件名。使用从 glob 获得的列表大小来打印整个过程。

from glob import glob
import shutil

dat_files = list(glob("*.dat"))
dat_file_len = len(dat_files)
for i, dat_file in enumerate(dat_files, 1):
    print(f"copying {i} of {dat_file_len}")
    shutil.copyfile(dat_file, datfile[:-4] + ".log")

【讨论】:

    【解决方案2】:

    首先,您必须获取目录中包含的所有.dat 文件的列表,代码如下所示:

    import glob
    import os
    
    dat_files = glob.glob('*.dat')
    for i, dat_file in enumerate(dat_files):
        print("Writing %d file..." %(i+1))
        inputFile = open (dat_file, 'r')
        outputFile = open(dat_file[:-3]+"log", 'w') # removing "dat" from end, and inserting new extension "log"
        outputFile.write(inputFile.read())
        inputFile.close()
        outputFile.close()
    

    【讨论】:

      【解决方案3】:

      您可以使用以下程序:

      import glob
      
      files_list = glob.glob('*.dat')
      
      count_dat_file=len(files_list)
      
      print("Count of .dat file is : {}\n".format(count_dat_file))
      
      count_var = 1
      
      for item in files_list:
          print("Pocessing file {} of {}".format(count_var, count_dat_file))
          print("Old File Name is  : {}".format(item))
          file_name_list = item.split('.')
          file_name_list[-1] = 'log'
          new_file_name = '.'.join(file_name_list)
          print("New file Name is  : {}".format(new_file_name))
          with open(item,'r') as input_file:
              with open(new_file_name,'w') as output_file:
                  output_file.write(input_file.read())
          print("Data written to new file : {}".format(new_file_name))
          count_var+=1
          print("\n")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-10
        • 1970-01-01
        • 2022-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-22
        相关资源
        最近更新 更多