txt文件很大,近200M,读取整个文件很慢,我不想读取整个文件
我只想替换第一行,第一行有很多列,分隔符为tab:
原文:1/[2]
替换后:12
------最佳解决方案--------------------------------------------------------
果然容易出错,上面运行后的数据文件被修改错了,第二行少了字符,因为有句代码没考虑好就是buffer=...那句:
再贴代码:
#! /usr/bin/env python
#coding=utf-8
'''
修改文本文件第一行
'''
def main():
datafilename='data1.txt'
fh=open(datafilename, 'r+')
firstline=fh.readline()
#print('fp tell', fh.tell())
#print(firstline)
lenfirstline=len(firstline)
#print(lenfirstline)
buffer=(firstline.replace('1/[2]', '12'))[:-1].ljust(lenfirstline-1)+'\n'
#print(buffer)
#print(len(buffer))
fh.seek(0)
fh.write(buffer)
fh.close()
if __name__=='__main__':
print('>')
main()
print('<')
'''
测试的data1.txt文件内容如下:
aa1/[2]bb1/[2]cc1/[2] dd1/[2]ee
aaaaabbbbbcccccddddd
eeeeefffffggggghhhhhiiiii
jjjjjkkkkklllllmmmmmnnnnn
'''
------其他解决方案--------------------------------------------------------
这种功能任何一种编程语言都有,思路就是打开文件只读取第一行,获取第一行的长度,然后对获取到的第一行内容进行替换,因为你这种情况下替换后第一行长度变短了,所以用空格补齐到相等长度并保存到一个变量中,然后再让文件指针指向文件开始处,把修改后的内容写入文件就行了。如果替换后长度比原来的长那就不行了,会把后面的数据给覆盖掉。
做这种操作还是需要小心的,一个没有考虑到的异常情况就可能导致你要修改的文件中的其它数据被覆盖掉。
以下是windows7+python3.2上写的代码供参考
#! /usr/bin/env python
#coding=utf-8
'''
修改文本文件第一行
'''
def main():
datafilename='data1.txt'
fh=open(datafilename, 'r+')
firstline=fh.readline()
#print('fp tell', fh.tell())
#print(firstline)
lenfirstline=len(firstline)
#print(lenfirstline)
buffer=(firstline.replace('1/[2]', '12'))[:-1].ljust(lenfirstline)+'\n'
#print(buffer)
#print(len(buffer))
fh.seek(0)
fh.write(buffer)
fh.close()
if __name__=='__main__':
print('>')
main()
print('<')
'''
测试的data1.txt文件内容如下:
aa1/[2]bb1/[2]cc1/[2] dd1/[2]ee
aaaaabbbbbcccccddddd
eeeeefffffggggghhhhhiiiii
jjjjjkkkkklllllmmmmmnnnnn
'''
运行后data1.txt文件内容如下:
aa12bb12cc12 dd12ee
abbbbbcccccddddd
eeeeefffffggggghhhhhiiiii
jjjjjkkkkklllllmmmmmnnnnn
------其他解决方案--------------------------------------------------------
不好意思,我没有说明白,我需要用vba实现。
------其他解决方案--------------------------------------------------------
google一下vba的指针操作不就有了,这里有一篇文章:
http://support.microsoft.com/kb/189981
------其他解决方案--------------------------------------------------------
没有能搞定这个的能人么?感谢支持。