我有几个大文本文本文件都具有相同的结构,我想删除前3行,然后从第4行删除非法字符.我不想读取整个数据集然后修改,因为每个文件超过100MB,超过400万条记录.
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
Run Code Online (Sandbox Code Playgroud)
因此应该删除第1,2和3行,在第4行中,"Rx(db)"应该只是"Rx","Best Unit"应该更改为"Best_Unit".然后我可以使用我的其他脚本对数据进行地理编码.
我不能使用像grep这样的命令行程序(如本问题所示)因为前3行并不完全相同 - 每个文件中的数字(例如150.0dB,-64*)都会改变,所以你必须删除整行1-3然后grep或类似可以在第4行进行搜索替换.
多谢你们,
===编辑新的pythonic方式来处理来自@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"
Run Code Online (Sandbox Code Playgroud)
回溯(最近一次调用最后一次):文件"P:\ 2012\Job_044_DM_Radio_Propogation\Working\FinalPropogation\TRC_Emerald\working\clean_file_1c.py",第13行,in newfilestring =''.join(第4行+ [fc行中的行]. readlines [4:]])TypeError:'builtin_function_or_method'对象是unsubscriptable
正如Wim在评论中所说的那样,这sed是正确的工具.以下命令应该执行您想要的操作:
sed -i -e '4 s/(dB)//' -e '4 s/Best Unit/Best_Unit/' -e '1,3 d' yourfile.whatever
Run Code Online (Sandbox Code Playgroud)
稍微解释一下这个命令:
-i 执行命令,即将输出写回输入文件
-e 执行命令
'4 s/(dB)//'上线4,替补多''了'(dB)'
'4 s/Best Unit/Best_Unit/' 与上面相同,除了不同的查找和替换字符串
'1,3 d' 从第1行到第3行(包括)删除整行
sed 是一个非常强大的工具,它可以做更多的事情,非常值得学习.
| 归档时间: |
|
| 查看次数: |
8629 次 |
| 最近记录: |