У меня есть несколько больших текстовых файлов (30 м + строки,> 1 ГБ), которые обрабатываются в ArcGIS после разделения (см. Удаление определенных строк из большого текстового файла в python и порция текстовой базы данныхна N равных блоков и сохраняют заголовок для фона).
Даже после разделения процесс занимает более 3 дней, поэтому я хочу удалить все точки xy, у которых (Rx) значение меньше или равно 0.
У меня нет python для работы над чтением наборов данных txt размером более 500 Мб, поэтому я использовал команды cygwin / SED для начальной очистки данных, а затем python для разбиения файла на части.Поэтому в идеале процесс должен был бы добавить некоторый код в питон (см. Ниже), чтобы он не включал все строки с Rx <= 0. </p>
Latitude Longitude Rx Best_Unit
-16.37617 144.68805 -012.9 7
-16.37617 144.68834 -015.1 7
-16.37617 144.68861 -017.2 7
-16.37617 144.68890 -018.1 7
-16.37617 144.68919 -025.0 7
-16.37617 144.68945 -019.5 7
-16.37617 144.68974 -020.0 7
-16.37617 144.69003 -020.4 7
-16.37617 144.69623 015.3 7
-16.37617 144.69652 015.6 7
-16.37617 144.69679 015.8 7
-16.37617 144.69708 016.0 7
-16.37617 144.70076 005.0 7
-16.37617 144.70103 002.2 7
-16.37617 144.70131 -000.2 7
-16.37617 144.70160 -001.5 7
-16.37617 144.70187 -001.0 7
-16.37617 144.70216 000.7 7
-16.37617 144.70245 002.2 7
-16.37617 144.70273 008.4 7
-16.37617 144.70300 017.1 7
-16.37617 144.70329 017.2 7
Я хочу, чтобы все строки (строки), где Rx> 0, былизаписано в новый текстовый файл.Я также хочу, чтобы столбец Best_Unit был удален.
from itertools import islice
import arcpy, os
#fc = arcpy.GetParameter(0)
#chunk_size = arcpy.GetParameter(1) # number of records in each dataset
fc='cb_vhn007_5.txt'
Name = fc[:fc.rfind('.')]
fl = Name+'.txt'
headers_count = 1
chunk_size = 500000
with open(fl) as fin:
headers = list(islice(fin, headers_count))
part = 1
while True:
line_iter = islice(fin, chunk_size)
try:
first_line = line_iter.next()
except StopIteration:
break
with open(Name+'_%d.txt' % part, 'w') as fout:
for line in headers:
fout.write(line)
fout.write(first_line)
for line in line_iter:
## add something here to check if value after third tab
## is >0 and if so then write the row or skip.
fout.write(line)
print "Created part %d" % part
part += 1
Новый код - первая строка содержит значения Rx.
from itertools import islice
import arcpy, os
#fc = arcpy.GetParameter(0)
#chunk_size = arcpy.GetParameter(1) # number of records in each dataset
fc='cb_vhn007_5.txt'
Name = fc[:fc.rfind('.')]
fl = Name+'.txt'
headers_count = 1
chunk_size = 500000
with open(fl) as fin:
headers = list(islice(fin, headers_count))
part = 1
while True:
line_iter = islice(fin, chunk_size)
try:
first_line = line_iter.next()
except StopIteration:
break
with open(Name+'_%d.txt' % part, 'w') as fout:
for line in headers:
fout.write(line)
fout.write(first_line)
for line in line_iter:
if line.split()[2][0:1] != '-':
#print line.split()[2]
fout.write(line)
print "Created part %d" % part
part += 1