У меня есть несколько больших текстовых текстовых файлов, которые имеют одинаковую структуру, и я хочу удалить первые 3 строки, а затем удалить недопустимые символы из 4-й строки.Я не хочу читать весь набор данных, а затем изменять его, так как каждый файл имеет размер более 100 МБ и более 4 миллионов записей.
Range 150.0dB -64.9dBm
Mobile unit 1 Base -17.19968 145.40369 999.8
Fixed unit 2 Mobile -17.20180 145.29514 533.0
Latitude Longitude Rx(dB) Best unit
-17.06694 145.23158 -050.5 2
-17.06695 145.23297 -044.1 2
Поэтому строки 1,2 и 3 следует удалить, а в строке 4, «Rx (дБ)» должно быть просто «Rx», а «Лучшая единица» должна быть изменена на «Best_Unit».Затем я могу использовать другие мои скрипты для геокодирования данных.
Я не могу использовать программы командной строки, такие как grep ( как в этом вопросе ), поскольку первые 3 строки не все одинаковые -числа (например, 150.0 дБ, -64 *) будут меняться в каждом файле, поэтому вам нужно просто удалить все строки 1-3, а затем grep или аналогичный может выполнить поиск-замену в строке 4.
Спасибо, ребята,
=== РЕДАКТИРОВАТЬ новый питонский способ обработки больших файлов из @heltonbiker.Ошибка.
import os, re
##infile = arcpy.GetParameter(0)
##chunk_size = arcpy.GetParameter(1) # number of records in each dataset
infile='trc_emerald.txt'
fc= open(infile)
Name = infile[:infile.rfind('.')]
outfile = Name+'_db.txt'
line4 = fc.readlines(100)[3]
line4 = re.sub('\([^\)].*?\)', '', line4)
line4 = re.sub('Best(\s.*?)', 'Best_', line4)
newfilestring = ''.join(line4 + [line for line in fc.readlines[4:]])
fc.close()
newfile = open(outfile, 'w')
newfile.write(newfilestring)
newfile.close()
del lines
del outfile
del Name
#return chunk_size, fl
#arcpy.SetParameterAsText(2, fl)
print "Completed"
Трассировка (последний вызов был последним): файл "P: \ 2012 \ Job_044_DM_Radio_Propogation \ Working \ FinalPropogation \ TRC_Emerald \ working \ clean_file_1c.py ", строка 13, в newfilestring = '' .join (line4 + [строка для строки в fc.readlines [4:]]) Ошибка типа: объект builtin_function_or_method является неподписанным