Программа №1 считывает весь файл, readlines(), обрабатывает его, а затем записывает данные в новый файл. Работает отлично.
Код:
Код: Выделить всё
datafile = "d:\\python\\workbook\\countries-raw.txt"
with open(datafile, "r") as file:
content = file.readlines()
content = [i.strip('\n') for i in content if '\n' in i]
content = [i for i in content if i != ""]
content = [i for i in content if i != "Top of Page"]
content = [i for i in content if len(i) != 1]
print(content)
newfile = "d:\\python\\workbook\\countries-raw-2.txt"
with open(newfile, "w") as file2:
for i in content:
file2.write(i + '\n')
X строк за раз. Он также работает точно так, как задумано.
Код с примером вывода:
Код: Выделить всё
textfile = "d:\\mark\\python\\test.txt"
def read_n(file, x):
with open(file, mode='r') as fh:
while True:
data = ''.join(fh.readline() for _ in range(x))
if not data:
break
yield data
for nlines in read_n(textfile, 5):
print(nlines)
'''
abc
123
def
456
ghi
789
jkl
abc
123
def
456
ghi
789
jkl
abc
123
def
456
ghi
789
jkl
abc
123
def
456
ghi
789
jkl
'''
прочитать весь файл и создать огромный список, как в программе №1.
Однако это будет излишне медленно:
Читать в одной строке.
Обработать строку.
Записать строку.
Повторять, пока не будет обработан весь файл.
Я думал логика моей второй программы была бы отличной здесь:
Чтение в X строках.
Обработка всех X строк.
Запись строк (может быть не совсем X в зависимости от того, что я делаю).
Повторяем, пока весь файл не будет обработан.
Это то, что у меня есть, но это не работает (обратите внимание, содержимое списка правильное после окончательного понимание обрабатывается):
Код: Выделить всё
textfile = "d:\\python\\workbook\\countries-raw.txt"
newfile = "d:\\python\\workbook\\temp-2.txt"
def read_n(file, x):
with open(file, mode='r') as fh:
while True:
data = ''.join(fh.readline() for _ in range(x))
content = data.split('\n')
content = [i for i in content if i != ""]
content = [i for i in content if i != "Top of Page"]
content = [i for i in content if len(i) != 1]
if not content:
break
yield content
for nlines in read_n(textfile, 50):
with open(newfile, "w") as file2:
for item in content:
content.write(item + '\n')
print(nlines)
Подробнее здесь: https://stackoverflow.com/questions/469 ... -in-chunks
Мобильная версия