我正在编写读取顺序ascii文件并对其进行更改的代码。
到目前为止,我已设法读取文件并替换字符串。例如:
import os
import re
parent_folder_path = '.'
for eachFile in os.listdir(parent_folder_path):
if eachFile.endswith('.sos'):
newfilePath = parent_folder_path+'/'+eachFile
file = open(newfilePath, 'r')
sos = file.read()
file.close()
sos = sos.replace('...KOORDSYS -1', '...KOORDSYS 22')
file = open(newfilePath, 'w')
file.write(str(sos))
file.close()
但我希望找到一个特定的位置(即一个字符串)并在其后插入以下三个字符串。
.DEF
..DRIFTSMERKING T26
..SPENNING T16
我正在使用的顺序ascii文件的结构如下所示:
.HODE
..TEGNSETT ISO8859-1
..TRANSPAR
...KOORDSYS 22
...ORIGO-NØ 0 0
...ENHET 0.01
..OMRÅDE
...MIN-NØ 6593309 455619
...MAX-NØ 6729987 588458
..SOSI-VERSJON 4.0
..SOSI-NIVÅ 2
..DAT0 20130313
我想要做的就是:
searchline = '..DATO'
lines = f.readlines()
i = lines.index(searchline)
lines.insert(i, '.DEF')
lines.insert(i+1, '..DRIFTSMERKING T26')
lines.insert(i+2, '..SPENNING T16')
答案 0 :(得分:1)
你很亲密。只需使用for循环来迭代输入行并应用两个规则。此示例添加数据,但要查看文件是否已首先转换。
import os
parent_folder_path = '.'
canned_insert = [
'.DEF' + os.linesep,
'..DRIFTSMERKING T26' + os.linesep,
'..SPENNING T16' + os.linesep]
canned_insert_buf = ''.join(canned_insert)
for eachFile in os.listdir(parent_folder_path):
if eachFile.endswith('.sos'):
newfilePath = os.path.join(parent_folder_path, eachFile)
lines = open(newfilePath, 'r').readlines()
with open(newfilePath, 'w') as f:
for i, line in enumerate(lines):
if line.strip() == '...KOORDSYS -1':
f.write('...KOORDSYS 22' + os.linesep)
else:
f.write(line)
if line.startswith('..DATO') and lines[i+1:i+4] != canned_insert:
f.write(canned_insert_buf)