【问题标题】:Concise way to write the same line in multiple files - Python在多个文件中编写同一行的简洁方法 - Python
【发布时间】:2020-06-02 10:37:34
【问题描述】:

我有几个打开的文件。现在,我需要在所有这些中写下同一行。我当前的代码如下,但它不雅且非常重复。有没有办法减少行数?

with open("a.txt", "a+") as fa,\
     open("b.txt", "a+") as fb,\
     open("c.txt", "a+") as fc,\
     open("d.txt",  "a+") as fd,\
     open("e.txt", "a+") as fe,\
     open("f.txt", "a+") as ff,\
     open("g.txt", "a+") as fg:

    fa.write("header")
    fb.write("header")
    fc.write("header")
    fd.write("header")
    fe.write("header")
    ff.write("header")
    fg.write("header")

在程序的其余部分(未显示)中,我以不同方式处理每个文件,为每个文件附加不同的信息。

如果这篇文章是重复的,对不起!

【问题讨论】:

    标签: python python-3.x file


    【解决方案1】:

    只需使用 for 循环:

    for file in files_list:
        with open(file, "a+") as fa:
            fa.write("header")
    

    将所有文件名放在files_list中

    【讨论】:

    • 但是如果我把它们都当作 fa 处理,我不能在下一行单独处理它们。我的意思是,在这里我将这一行写入所有文件,这很好。但是后来,我以不同的方式处理每个文件。因此,如果我使用 fa.write("something else") 它将全部更改,而不仅仅是我想要的 b.txt 或 c.txt。
    【解决方案2】:

    我能想到的最简单的是:

    for i in range(7):
        f[i] = open("f" + chr(ord('a') + i) + ".txt", "a+")
    
    for i in range(7):
        f[i].write("header")
    

    然后你就可以做你的事了……

    【讨论】:

      【解决方案3】:

      您可以创建context manager 来创建打开文件的字典,然后遍历该字典以在所有文件中写入标题。

      使用字典而不是列表来确保您可以在主代码中独立可靠地使用文件

      一种可能的实现方式:

      from contextlib import contextmanager
      
      @contextmanager
      def open_many(key_path):
          opened_files = {}
          try:
              opened_files = {key: open(path, "w") for key, path in key_path.items()}
              yield opened_files
          finally:
              for f in opened_files.values():
                  f.close()
      
      
      with open_many({"a": "a.txt", "b": "b.txt"}) as file_map:
          for f in file_map.values():
              f.write("header")
      

      【讨论】:

        猜你喜欢
        • 2014-01-26
        • 2021-09-29
        • 2014-06-15
        • 2015-09-14
        • 1970-01-01
        • 2014-10-02
        • 1970-01-01
        • 2013-10-13
        • 2013-01-17
        相关资源
        最近更新 更多