我对Python还不熟悉。我正在尝试使用一个包含新数据的文件(newprops)来替换第二个文件上的旧数据。两个文件都超过3MB。你知道吗
包含新数据的文件如下所示:
PROD 850 30003 0.096043
PROD 851 30003 0.096043
PROD 853 30003 0.096043
PROD 852 30003 0.096043
....
包含旧数据的原始文件类似于:
CROD 850 123456 123457 123458 123459
PROD 850 30003 0.08
CROD 851 123456 123457 123458 123459
PROD 851 30003 0.07
CROD 852 123456 123457 123458 123459
PROD 852 30003 0.095
CROD 853 123456 123457 123458 123459
PROD 853 30003 0.095
....
输出应为:
CROD 850 123456 123457 123458 123459
PROD 850 30003 0.096043
CROD 851 123456 123457 123458 123459
PROD 851 30003 0.096043
CROD 852 123456 123457 123458 123459
PROD 852 30003 0.096043
CROD 853 123456 123457 123458 123459
PROD 853 30003 0.096043
以下是我目前掌握的情况:
import fileinput
def prop_update(newprops,bdffile):
fnewprops=open(newprops,'r')
fbdf=open(bdffile,'r+')
newpropsline=fnewprops.readline()
fbdfline=fbdf.readline()
while len(newpropsline)>0:
fbdf.seek(0)
propname=newpropsline.split()[1]
propID=newpropsline.split()[2]
while len(fbdfline)>0:
if propID and propname in fbdfline:
bdffile.write(newpropsline) #i'm stuck here... I want to delete the old line and use updated value
else:
fbdfline=fbdfline.readline()
newpropsline=fnewprops.readline()
fnewprops.close()
请帮帮我!你知道吗
您可以使用dict索引新数据。然后将原始文件写入一个新文件,逐行更新索引中的数据。看起来前三项应该是键(“prod85030003”),它们可以用
(PROD\s+\d+\s+\d+)
这样的正则表达式取出。你知道吗您可以从原件中取出第二行并用新行压缩它们,然后重新打开原件并写入更新的行,假定新行等于原件长度的一半:
如果要根据第二列对行进行排序,还需要手动剥离并插入换行符,以便将最后的行分开:
输出:
如果长度不相同,则可以使用itertools.izip_longest,fillvalue为
""
,这样就不会丢失任何数据:如果旧文件已经按顺序排列,只需忘记f2上的排序调用并使用
f2.readlines()[::2]
,但如果它不按顺序排列,则这将确保所有行都按第二列排序,而不管原始顺序如何。你知道吗相关问题 更多 >
编程相关推荐