Chinaunix
标题:
求教python文本处理
[打印本页]
作者:
sullybear
时间:
2014-03-16 00:21
标题:
求教python文本处理
已知文件
A 1 3
A 4 5
B 2 3
B 4 6
B 8 9
得出
A 1 5
B 2 6
B 8 9
的脚本
文件行数会比较多,将数字连续的整合
作者:
timespace
时间:
2014-03-16 11:50
清楚的解释下规则,别人不一定看懂你的例子。
作者:
sullybear
时间:
2014-03-16 22:03
对于相同的元素A,如果第二行的第一个数字是第一行的第二个数字的值+1,即可以实现连续
作者:
ssfjhh
时间:
2014-03-17 09:28
回复
3#
sullybear
还是没看懂呀。
作者:
timespace
时间:
2014-03-17 11:06
回复
3#
sullybear
但愿我看明白了。generator实现,不管文件有多大,占用很少内存。
import io
infile = io.StringIO(
'''A 1 3
A 4 5
B 2 3
B 4 6
B 8 9
''')
def parse(fp):
for line in fp:
fields = line.split()
if len(fields) == 3 and fields[1].isdigit() and fields[2].isdigit():
fields[1], fields[2] = int(fields[1]), int(fields[2])
yield fields
def merge(records):
value = next(records, None)
if value is None:
return
for e in records:
if value[0] == e[0] and value[2] + 1 == e[1]:
value[2] = e[2]
else:
yield value
value = e
yield value
def main():
for e in merge(parse(infile)):
print(*e)
if __name__ == '__main__':
main()
复制代码
保存为main.py,执行:
bash-3.2 $python --version
Python 3.3.4
bash-3.2 $python main.py
A 1 5
B 2 6
B 8 9
复制代码
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2