python opening multiple files and using multiple directories at once

本秂侑毒 提交于 2019-12-12 01:59:00

问题


I can open two files at once using with open, now if i am going through two directories using this same method,

f = open(os.path.join('./directory/', filename1), "r") 
f2 = open(os.path.join('./directory2/', filename1) "r")

with open(file1, 'a') as x: 
   for line in f:
     if "strin" in line:
          x.write(line) 
with open(file2, 'a') as y:
   for line in f1:
      if "string" in line:
          y.write(line)

merge these into one method


回答1:


Your pseudocode (for line in f and f1, x.write(line in f) y.write(line in f1)) has the same effect as the original code you posted, and isn't useful unless there is something about the corresponding lines in the two files that you want to process.

But you can use zip to combine iterables to get what you want

import itertools

with open(os.path.join('./directory', filename1)) as r1, \
     open(os.path.join('./directory2', filename1)) as r2, \
     open(file1, 'a') as x, \
     open(file2, 'a') as y:
     for r1_line, r2_line in itertools.izip_longest(r1, r2):
         if r1_line and "string" in line:
             x.write(r1_line) 
         if r2_line and "string" in line:
             y.write(r1_line) 
  • I put all of the file objects in a single with clause using \ to escape the new line so that python sees it as a single line

  • The various permutations of zip combine iterables into a sequence of tuples.

  • I chose izip_longest because it will continue to emit lines from both files, using None for the files that empty first, until all lines are consumed. if r1_line ... just makes sure we aren't at the Nones for file that has been fully consumed.

  • This is a strange way to do things - for the example you've given, it's not the better choice.



来源:https://stackoverflow.com/questions/26899615/python-opening-multiple-files-and-using-multiple-directories-at-once

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!