【问题标题】:Insert selected text from one file into multiple files -python将一个文件中的选定文本插入多个文件 -python
【发布时间】:2014-08-16 05:21:36
【问题描述】:

我有一个文件(我们称之为 file_A),我从中提取 5 行(像这样)

 pppppppp
 qqqqqqqq
 rrrrrrrr
 ssssssss
 tttttttt

现在我想在其他 10 个文件的开头插入这五行(我们称它们为 1..10)。

我想打开 file_A(一个有 5 行),然后一个一个打开 10 个文件,并将这些行插入这些文件的开头。

现在我执行以下操作:

1)打开file_A,提取五行中的第一行(pppppppp)写入新文件
2)然后是第二行......所以一个。
3) 打开文件 1 并复制所有行,然后写出在步骤 1 中打开的新文件
4)关闭所有文件……重复

所以我最终得到了 10 个新文件,而我宁愿将提取的 5 行存储到现有文件中,也避免打开和关闭 file_A 10 次!

我可以使用什么工具将这 5 行存储在内存中而不会使它们失真?

谢谢

【问题讨论】:

  • 只需 .read 将整个文件作为字符串保存在内存中。
  • 或者,如果您想更改它们的顺序,请将它们存储在列表中。每行作为列表的不同项目。
  • 问题是我想要的五行在那个文件(file_A)的中间,所以我不想一遍又一遍地阅读找到那5行。
  • 然后.readlines 得到一个列表并从中切出你想要的行lines = lines[x:x+5]
  • @jonrsharpe 或使用list(islice(fileobj, start, start+5))(如果从 1 开始计数,请记住从头开始取 1)

标签: python file


【解决方案1】:

将文件放在一个列表中,然后遍历该列表:

    file_list = ["foo.txt","bar.txt"...]
    with open("file_A.txt","r+") as f: # open once
        # extract lines
        extracted = [] # put data here
        for f in file_list:
            with open(f, "r+") as out:
                lines = out.readlines()
                lines[0:0] = extracted # add data at start 
                out.seek(0)
                out.write("".join(lines)) # write new data

【讨论】:

    【解决方案2】:

    我不确定您是否需要重新写入数据,但如果不需要,您可以使用(未​​经测试):

    from itertools import islice, chain
    
    with open('filea.txt') as fin:
        first5 = list(islice(fin, 5)) # or whatever criteria to get the 5
    
    for filename in ['file1.txt', 'file2.txt', 'file3.txt']: #etc
        with open(filename) as fin, open(filename + '.out') as fout:
            fout.writelines(chain(first5, fin))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-23
      • 2016-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多