Читать большой файл построчно, а также записывать в другой большой файл в Python - PullRequest
0 голосов
/ 31 мая 2019

Я пытаюсь читать большой файл построчно, а также записывать в большой файл, и я хочу знать «лучший» способ сделать это.

Я нашел этот пост переполнения стека для чтения большого файла строка за строкой и хочу знать, как правильно включить запись в файл. Есть ли что-нибудь лучше, чем вложение 2-го with open

Что у меня сейчас есть:

 #args is parsed from the command line
 #file is an exogenous variable
 with open(args.inPath + file, "r") as fpIn:
   with open(args.outPath + file, "w") as fpOut:
     for line in fpIn:
       if re.match(some match): canWrite = True
       if re.match(some match 2): break
       if canWrite: fpOut.write(line)

Ответы [ 2 ]

4 голосов
/ 31 мая 2019

Вам не нужно вкладывать операторы with.Один оператор with может использовать несколько контекстных менеджеров.

with open(args.inPath + file, "r") as fpIn, open(args.outPath + file, "w") as fpOut:
    for line in fpIn:
       if re.match(some match): canWrite = True
       if re.match(some match 2): break
       if canWrite: fpOut.write(line)

Это немного чище.

0 голосов
/ 31 мая 2019

yield ваш лучший друг: через Ленивый метод чтения больших файлов в Python?

def read_in_chunks(file_object, chunk_size=1024):
  """Lazy function (generator) to read a file piece by piece.
  Default chunk size: 1k."""
  while True:
    data = file_object.read(chunk_size)
    if not data:
      break
    yield data

f = open(args.inPath + file, "r")

with open(args.outPath + file, "a") as fpOut:
  for chunk in read_in_chunks(f):
    if re.match(some match): canWrite = True
    if re.match(some match 2): break
    if canWrite: fpOut.write(chunk)

См. Также: https://www.pythoncentral.io/python-generators-and-yield-keyword/, https://www.geeksforgeeks.org/use-yield-keyword-instead-return-keyword-python/

Это также значительно облегчит вашу память.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...