привет!
прошу подсказать как можно улучшить следующий код для обработки здоровенного 30GB текстового файла со строками.
требуется:
a) удалить в файле символ "|"
б) удалить все до первой открытой скобки "<"
в) удалить в конце файла всё что начинается на символ "-"
г) удалить в кажд строке пробелы в начале и в конце
д) удалить пустые строки
е) присоединить в конец кажд строки символ '."
как я это пока себе представляю:
def process(lines):
dataStr = "".join(lines)
# remove | globally
p = re.compile(r'\|')
dataStr = p.sub("", dataStr)
# fix header
p = re.compile(r'^[^<]*')
dataStr = p.sub("", dataStr)
#fix footer
p = re.compile('-*$')
dataStr = p.sub("", dataStr)
# delete BOTH leading and trailing whitespace from each line
#TODO: do better
data =dataStr.split('\n')
#remove empty lines
data = list(filter(lambda x: len(x) > 0, data))
#append ending . to each line
data = [l.strip() + '.' for l in data]
return data
if __name__ == "__main__":
if len(sys.argv) != 2:
print "usage: %s %s" % (sys.argv[0], "dump.txt")
exit(-1)
else:
fname = sys.argv[1]
with open(fname, "r+") as file:
data = list()
i = 0
while True:
if i >= 100000:
result = process(data)
#TODO: append result to output file
i = 0
data = list()
else:
line = file.readline()
if not line:
if data:
result = process(data)
#TODO: append result to output file
break
data.append(line)
i += 1
т.е. читаю в список по сто тыщ строк, и обрабатываю их, записываю в выходной файл. и так пока не кончатся данные все из исходного файла.
смущает явные излишние "кувыркания" данных в ф-ции "process" и назад: list_of_strings <--> string. как сделать лаконичней, а самое главное, быстрее по времени исполнения? спасибо!